我目前正在使用for循环,但是当我尝试这样做时
TIMESTAMPS
或.equals相同的东西,它永远不会添加一个。
谢谢
答案 0 :(得分:1)
请确保您不应该使用==
运算符。然后,我怀疑equals
不起作用。
关键点是“ \ n”是char
。考虑下面的代码,然后选择您喜欢的选项
String input = "a\n";
String newLine = System.getProperty("line.separator");
// return 2 because the string contains 2 chars: "a" and "\n"
System.out.println("CharArraysLenIs: " + input.toCharArray().length);
// return true because it compares the strings on char long each
System.out.println("WithEquals_1_Is: " + input.substring(1,2).equals(newLine));
// return true because it compares the strings on char long each
System.out.println("WithEquals_2_Is: " + input.substring(1,2).equals("\n"));
// return false because it copares the location in memory.
// They are really different objects (strings) in the java heap.
System.out.println("WithEqualOperatorIs: " + (input.substring(1,2) == "\n"));
答案 1 :(得分:0)
您的代码不正确:
if(input.substring(i,i++)=="\n")){
space ++;
}
返回一个空字符串,因为在您的情况下beginIndex和endIndex相等。这是因为在变量已被评估和使用后,i ++将使i递增。为了使您的代码正常工作,请将i ++更改为++ i并使用等于not ==,或者将“ \ n”更改为'\ n',并将子字符串更改为charAt:
if(input.substring(i,++i).equals("\n")){
space ++;
}
或
if(input.charAt(i++) == '\n'){
space ++;
}
答案 2 :(得分:0)
如上所述,you shouldn't compare strings with ==
。此外,在此之前和之后的增量运算符是完全错误的。如评论中@Maxime所提到的,i++
使存储在i
中的值递增。因此,发生的事情是您先使用substring(1,1)
,然后是substring(2,2)
,以此类推,它们都返回长度为0的空字符串。(不相信我吗?Try it yourself here。)
由于您有一个工作的for循环,正如您提到的,您可以只使用charAt
方法来获取该位置的字符,然后使用==
比较该字符(不是字符串) )到'\n'
。
例如。
if (input.charAt(i) == '\n') {
space++;
}
答案 3 :(得分:-1)
private static int countLines(String str){
String[] lines = str.split("\n");
return lines.length-1;
}
这可能会对您有所帮助。