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

4

4 回答 4

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()]);
于 2012-08-14T15:03:15.207 回答
0

使用String.endsWith. 很简单:

String[] files = {"file1.java", "file2.java"};
for(String f: files)
     if(f.endsWith(".java"))
          System.out.println(f);
于 2012-08-14T14:59:51.223 回答
0

您会得到 [Ljava.lang.String;@67d479cf作为默认 toString() 方法的结果,该方法定义在 Object 类中,当您对数组执行 System.out.println 时会调用该方法。

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

你的对象是一个数组,默认情况下java不会'toStringify'它的内容。

于 2012-08-14T15:00:20.437 回答
0

那是一个哈希码字符串。您不应该直接打印数组。从数组中取出值javaFileNames并打印。

for(int i = 0;  i < javaFileNames.length; i++)
    System.out.println(javaFileNames[i]);
于 2012-08-14T15:00:37.300 回答