2012-08-14 52 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