计算输入字符串中“ \ n”的次数

时间:2019-10-21 15:11:39

标签: java newline

我目前正在使用for循环,但是当我尝试这样做时

TIMESTAMPS

或.equals相同的东西,它永远不会添加一个。

谢谢

4 个答案:

答案 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;
}

这可能会对您有所帮助。