Подсчет, сколько раз "\ n" находится во введенной строке - PullRequest
0 голосов
/ 21 октября 2019

В настоящее время у меня работает цикл for, но когда я пытаюсь выполнить

if(input.substring(i,i++)=="\n")){
   space ++;
}

или то же самое с .equals, он все равно никогда не добавляет ни одного.

Спасибо

Ответы [ 4 ]

1 голос
/ 21 октября 2019

Конечно, вы не должны использовать оператор ==. Тогда я сомневаюсь, что 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"));
0 голосов
/ 21 октября 2019

Как уже упоминалось, вы не должны сравнивать строки с ==. Кроме того, операторы пре- и постинкрементные здесь совершенно неверны. Как упомянуто в комментарии @Maxime, i++ увеличивает значение, сохраненное в i. Итак, что происходит, вы берете substring(1,1), затем substring(2,2) и т. Д., Которые все возвращают пустые строки длины 0. (Не верьте мне? Попробуйте сами здесь .)

Поскольку у вас есть рабочий цикл for, как вы упомянули, вы можете просто использовать метод charAt, чтобы получить символ в позиции, а затем использовать ==, чтобы сравнить символ (не строку) с '\n'.

Например.

if (input.charAt(i) == '\n') {
  space++;
}
0 голосов
/ 21 октября 2019

Ваш код неверен:

if(input.substring(i,i++)=="\n")){
   space ++;
}

возвращает пустую строку, потому что beginIndex и endIndex равны в вашем случае. Это потому, что i ++ будет увеличивать i после того, как переменная была оценена и использована. Чтобы заставить ваш код работать, измените i ++ на ++ i и используйте равно не ==, или измените "\ n" на '\ n' и подстроку на charAt:

if(input.substring(i,++i).equals("\n")){
   space ++;
}

или

if(input.charAt(i++) == '\n'){
   space ++;
}
0 голосов
/ 21 октября 2019
private static int countLines(String str){
   String[] lines = str.split("\n");
   return  lines.length-1;
}

Это может помочь вам.

...