2015-01-20 2 views
1

Я пытаюсь проверить, содержит ли данная строка только разрывы строк и символы. Я использую этот методПроверьте, является ли String только разрывы строк.

boolean breaksNoLetters(String msg) { 
    if (!msg.matches(".*[a-zA-Z]+.*") && msg.contains("\n")) { 
     return true; 
    } else { 
     return false; 
    } 
} 

Он только не возвращает false, если он содержит разрыв строки.

+1

Под символами вы подразумеваете буквы? Значит, число с wgite-символами будет правильным? – Beri

+0

все будет проходить, за исключением \ n –

ответ

10

Почему бы не протестировать его против этого регулярного выражения?

if (msg.matches("[\\n\\r]+")) { } 

Это регулярное выражение будет соответствовать всем строкам, которые содержат один или несколько символов из набора \n и \r.

2

Один путь должен был бы заменить \n с пустой строкой и проверить все, что остается:

boolean breaksNoLetters(String msg) { 
    return !msg.replace("\n", "").isEmpty(); 
} 

EDIT:
С Java 8 в потоках, это довольно легко проверить, что все символы, на самом деле, \n s:

boolean justLineBreaks = msg.chars().allMatch(c -> c == '\n'); 
4

Я пытаюсь проверить, если данная строка содержит только разрывы строк и никаких символов.

String Path1 = "\n\r"; 
String Path2 = "foo\nbar"; 
System.out.println(Path1.matches("[\\n\\r]+")); 
System.out.println(Path2.matches("[\\n\\r]+")); 

"[\\n\\r]+" соответствует одному или более новой строки или возврата каретки. Также используйте поле \\f ()) внутри класса символов, если необходимо.

Выход:

true 
false 
+0

@MarounMaroun для этого входа \ "\ n \ r, это' System.out.println (Path1.matches ("[\ n \ r] +")); 'возвращает true. Ты знаешь почему? –

+0

В regexp '\ n' и' \\ n' одинаковы для большинства целей. Другие escape-выражения regexp различаются, потому что компилятор Java не имеет прямой поддержки для них. –

+0

@AaronDigulla да, я так думаю. –

1

Если вы должны проверить, если String содержит только одинразрыва линии и никаких других символов, используйте equals() метод:

public boolean isLineBreak(String line) { 
    return line.equals(System.getProperty("line.separator")); 
} 

Другими предлагают дать вам, использовать метод System.getProperty("line.separator"), чтобы получить символы разделителей строк, потому что это platform независимый. Например, UNIX использует \n и Windows\r\n. С помощью этого метода вам не нужно это делать.

Java 7 имеет метод System.lineSeparator(), что позволяет делать то же самое, что и System.getProperty("line.separator").

В противном случае, если вы должны проверить, если String содержит один или болееразрыв строки, просто используйте:

public boolean isLineBreak(String line) { 
    return line.matches("[\\n\\r]+"); 
} 
0

невыполнима, Вы писали

только разрывы строк и нет знаков

и line перерывы - особый характер. Вернитесь назад и подумайте о том, какую проблему вы хотите решить. Нужно ли проверять хотя бы один печатный символ? Затем trim() строку и проверить, если length()> 0. Else RegEx выше является хорошим.

Смежные вопросы