我要编写一个代码,在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
答案 0 :(得分:3)
您可以使用endsWith
检查String的结尾if(s.endsWith(".java"))
您可以使用Arrays.toString打印数组
System.out.println(Arrays.toString(javaFileNames));
你必须这样做,因为数组作为普通对象不是很有用,例如toString,notify,wait,equals,hashCode不对数组做任何非常有用的事情。
使用List
可能更好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()]);
答案 1 :(得分:0)
使用String.endsWith
。这很简单:
String[] files = {"file1.java", "file2.java"};
for(String f: files)
if(f.endsWith(".java"))
System.out.println(f);
答案 2 :(得分:0)
你得到 [Ljava.lang.String; @ 67d479cf 作为默认的toString()方法的结果,在Object类中定义,当你执行数组的System.out.println时调用
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
您的对象是一个数组,默认情况下,java不会'toStringify'其内容。
答案 3 :(得分:0)
这是一个哈希码字符串。你不应该直接打印数组。从数组javaFileNames
中取出值并打印。
for(int i = 0; i < javaFileNames.length; i++)
System.out.println(javaFileNames[i]);