更新時間:2020-06-02 14:27:16 來源:動力節點 瀏覽2627次
1.判斷身份證:要么是15位,要么是18位,最后一位可以為字母,并寫程序提出其中的年月日。
答:我們可以用正則表達式來定義復雜的字符串格式,(\d{17}[0-9a-zA-Z]|\d{14}[0-9a-zA-Z])可以用來判斷是否為合法的15位或18位身份證號碼。
因為15位和18位的身份證號碼都是從7位到第12位為身份證為日期類型。這樣我們可以設計出更精確的正則模式,使身份證號的日期合法,這樣我們的正則模式可以進一步將日期部分的正則修改為[12][0-9]{3}[01][0-9][123][0-9],當然可以更精確的設置日期。
在jdk的java.util.Regex包中有實現正則的類,Pattern和Matcher。以下是實現代碼:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexTest{
/**
* param args
*/
public static void main(String[]args){
//測試是否為合法的身份證號碼
String[]strs={"130681198712092019","13068119871209201x",
"13068119871209201","123456789012345","12345678901234x",
"1234567890123"};
Pattern p1=Pattern.compile("(\\d{17}[0-9a-zA-Z]|\\d{14}[0-9a-zA-Z])");
for(int i=0;i<strs.length;i++){
Matcher matcher=p1.matcher(strs<i>);
System.out.println(strs<i>+":"+matcher.matches());
}
Pattern p2=Pattern.compile("\\d{6}(\\d{8}).*");//用于提取出生日字符串
Pattern p3=Pattern.compile("(\\d{4})(\\d{2})(\\d{2})");//用于將生日字符串進行分解為年月日
for(int i=0;i<strs.length;i++){
Matcher matcher=p2.matcher(strs<i>);
boolean b=matcher.find();
if(b){
String s=matcher.group(1);
Matcher matcher2=p3.matcher(s);
if(matcher2.find()){
System.out.println("生日為"+matcher2.group(1)+"年"
+matcher2.group(2)+"月"
+matcher2.group(3)+"日");
}
}
}
}
}
2.編寫一個程序,將a.txt文件中的單詞與b.txt文件中的單詞交替合并到c.txt文件中,a.txt文件中的單詞用回車符分隔,b.txt文件中用回車或空格進行分隔。
答:
package cn.itcast;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
public class MainClass{
public static void main(String[]args)throws Exception{
FileManager a=new FileManager("a.txt",new char[]{'\n'});
FileManager b=new FileManager("b.txt",new char[]{'\n',''});
FileWriter c=new FileWriter("c.txt");
String aWord=null;
String bWord=null;
while((aWord=a.nextWord())!=null){
c.write(aWord+"\n");
bWord=b.nextWord();
if(bWord!=null)
c.write(bWord+"\n");
}
while((bWord=b.nextWord())!=null){
c.write(bWord+"\n");
}
c.close();
}
}
class FileManager{
String[]words=null;
int pos=0;
public FileManager(String filename,char[]seperators)throws Exception{
File f=new File(filename);
FileReader reader=new FileReader(f);
char[]buf=new char[(int)f.length()];
int len=reader.read(buf);
String results=new String(buf,0,len);
String regex=null;
if(seperators.length>1){
regex=""+seperators[0]+"|"+seperators[1];
}else{
regex=""+seperators[0];
}
words=results.split(regex);
}
public String nextWord(){
if(pos==words.length)
return null;
return words[pos++];
}
}
3.編寫一個程序,將d:\java目錄下的所有.java文件復制到d:\jad目錄下,并將原來文件的擴展名從.java改為.jad。
答:listFiles方法接受一個FileFilter對象,這個FileFilter對象就是過慮的策略對象,不同的人提供不同的FileFilter實現,即提供了不同的過濾策略。
import java.io.File
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class Jad2Java{
public static void main(String[]args)throws Exception{
File srcDir=new File("java");
if(!(srcDir.exists()&&srcDir.isDirectory()))
throw new Exception("目錄不存在");
File[]files=srcDir.listFiles(
new FilenameFilter(){
public boolean accept(File dir,String name){
return name.endsWith(".java");
}
}
);
System.out.println(files.length);
File destDir=new File("jad");
if(!destDir.exists())destDir.mkdir();
for(File f:files){
FileInputStream fis=new FileInputStream(f);
String destFileName=f.getName().replaceAll("\\.java$",".jad");
FileOutputStream fos=new FileOutputStream(new File(destDir,destFileName));
copy(fis,fos);
fis.close();
fos.close();
}
}
private static void copy(InputStream ips,OutputStream ops)throws Exception{
int len=0;
byte[]buf=new byte[1024];
while((len=ips.read(buf))!=-1){
ops.write(buf,0,len);
}
}
}
由本題總結的思想及策略模式的解析:
(1)class jad2java{ ,得到某個目錄下的所有的java文件集合
①得到目錄File srcDir=new File("d:\\java");
②得到目錄下的所有java文件:File[]files=srcDir.listFiles(new MyFileFilter());
③只想得到.java的文件:class MyFileFilter implememyts FileFilter{
public boolean accept(File pathname){
return pathname.getName().endsWith(".java")
}
}
(2)將每個文件復制到另外一個目錄,并改擴展名
①得到目標目錄,如果目標目錄不存在,則創建之
②根據源文件名得到目標文件名,注意要用正則表達式,注意.的轉義。
③根據表示目錄的File和目標文件名的字符串,得到表示目標文件的File。
④將源文件的流拷貝成目標文件流,拷貝方法獨立成為一個方法,方法的參數采用抽象流的形式。
分析listFiles方法內部的策略模式實現原理
File[]listFiles(FileFilter filter){
File[]files=listFiles();
//Arraylist acceptedFilesList=new ArrayList();
File[]acceptedFiles=new File[files.length];
int pos=0;
for(File file:files){
boolean accepted=filter.accept(file);
if(accepted){
//acceptedFilesList.add(file);
acceptedFiles[pos++]=file;
}
}
Arrays.copyOf(acceptedFiles,pos);
//return(File[])accpetedFilesList.toArray();
}
以上就是動力節點java培訓機構的小編針對“Java中信筆試題,自己做一下試試看”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習