2012-08-14 72 views
2

我必須編寫一個代碼,它接受文件名作爲String []中的輸入,並返回擴展名爲「.java」的所有文件。打印指定的擴展文件

這是我的代碼:

public String[] getJavaFiles(String[] fileNames){ 
    int l=fileNames.length; 
    int count=0; 
    int l2,i=0; 
    String s; 
    String dummy[]=new String[l]; 
    for (i=0; i<l; i++){ 
     s=fileNames[i]; 
     if (s.endsWith(".java")) 
      { 
      dummy[i-count]=s; 
      count++; 
      } 
     } 
    String javaFileNames[]=new String[count]; 
    for (i=0; i<count; i++){ 
     javaFileNames[i]=dummy[i]; 
     } 
    return (javaFileNames); 
    } 
} 

我得到這樣的輸出:

can.java 
and.java 
can.java 
and.java.java 
and.java.xys.pdf.java.doc.java 
[Ljava.lang.String;@67d479cf 

我的問題是:什麼是我得到?最後一行: [ Ljava.lang.String; @ 67d479cf

+7

您可以簡化您的'if'很多:'如果s.endsWith( 「Java」 的){}'。 – 2012-08-14 14:59:13

回答

3

可以檢查字符串的結尾用的endsWith

if(s.endsWith(".java")) 

您可以使用Arrays.toString打印數組

System.out.println(Arrays.toString(javaFileNames)); 

你必須這樣做,因爲數組不是作爲普通對象非常有用,例如toString,notify,wait,equals,hashCode不會對數組做任何非常有用的操作。

什麼可能是更好的方法是使用一個列表

List<String> javaNames = new ArrayList<>(); 
for (int i=0; i<l; i++) 
    if (fileNames[i].endsWith(".java")) 
     javaNames.add(fileNames[i]); 
System.out.println(javaNames); 
return javaNames.toArray(new String[javaNames.size()]); 
+0

其實我會返回結果。函數是 public String [] getJavaFiles(String [] fileNames){' – user188995 2012-08-14 15:07:07

+0

其實函數是 'public String [] getJavaFiles(String [] fileNames)' 所以我不得不返回String []而不是隻需打印它。 – user188995 2012-08-14 15:08:19

+0

添加了一行來做到這一點。 – 2012-08-14 15:08:35

0

使用String.endsWith。這是簡單的:

String[] files = {"file1.java", "file2.java"}; 
for(String f: files) 
    if(f.endsWith(".java")) 
      System.out.println(f); 
0

你得到[Ljava.lang.String; @ 67d479cf作爲默認的toString()方法,在Object類中定義的結果,叫做當你做的的System.out.println你的數組。

public String toString() { 
    return getClass().getName() + "@" + Integer.toHexString(hashCode()); 
    } 

你的對象是一個數組,默認情況下java不會'toStringify'它的內容。

0

這是一個哈希碼字符串。你不應該直接打印數組。從數組javaFileNames中取出數值並打印。

for(int i = 0; i < javaFileNames.length; i++) 
    System.out.println(javaFileNames[i]); 
+0

正在使用的函數是'public String [] getJavaFiles(String [] fileNames)'..我必須返回一些東西,而不是僅僅打印它。這就是我回來的原因。 – user188995 2012-08-14 15:44:15

+0

返回您正在打印的位置後,使用上面的代碼打印這些值。 – 2012-08-14 18:50:38