Я написал небольшую программу
class Test {
public static void main(String[] args) {
String s = "\n";
System.out.println(s.length());
for (int i = 0; i < s.length(); i++) {
System.out.println(s.charAt(i));
}
}
}
Программа задает длину как 1
и рассматривает \n
как один новый символ строки.
Мое требование - рассматривать \n
как обычную строку, так что с 2
символами (первый символ \
и второй символ n
), что можно сделать для ее достижения?
ПРИМЕЧАНИЕ. 1) Мы не можем изменить строку, чтобы добавить дополнительный escape-символ. 2) Мы не хотим использовать дополнительную стороннюю библиотеку
Вы можете использовать StringEscapeUtils
утилиты StringEscapeUtils
из commons-lang
.
String s = "\n";
s = StringEscapeUtils.escapeJava(s);
System.out.println(s.length());
for (int i = 0; i < s.length(); i++) {
System.out.println(s.charAt(i));
}
Вывод:
2
\
n
Если вы абсолютно не можете использовать библиотеку, такую как commons-lang
, тогда вы можете написать свой собственный метод, чтобы сделать это. Вы можете просмотреть код вышеуказанного класса, чтобы увидеть пример того, как вы можете избежать строки для учета разных специальных символов.
Вы можете выполнить поиск по строке и заменить все символьные версии /n на//n.
String s = convertNewLineChars("\n");
public String convertNewLineChars(String s)
{
//for each character in string, replace '\n' with \\n
}
редактировать
Используйте перечисление для всех возможных специальных символов
public enum SpecialCharacter
{
NEWLINE('\n', "\\\\n"), //see note at the bottom of the answer for why
RETURN('\r', "\\\\r"); //there are four backslashes.
private char character;
private String charAsString;
private SpecialCharacter(char character, String charAsString)
{
this.character = character;
this.charAsString = charAsString;
}
public char getCharacter()
{
return this.character;
}
public String getCharAsString()
{
return this.charAsString;
}
public static SpecialCharacter[] getAllCharacters()
{
return new SpecialCharacter[] {NEWLINE, RETURN}; //etc...
}
}
Создайте статический метод для удаления этих символов
public static String removeSpecialCharacters(String s)
{
String returnString = s;
for (SpecialCharacter character : SpecialCharacter.getAllCharacters())
{
returnString = returnString.replaceAll("["+character.getCharacter()+"]", character.getCharAsString());
}
return returnString;
}
Тогда вы можете сказать что-то вроде:
String s = removeSpecialCharacters("\nfdafhoean\noasd\r\rjfoi");
System.out.println(s);
Это будет работать с любым специальным символом, который вы добавляете в перечисление.
* Обратите внимание, что replaceAll() будет потреблять дополнительную обратную косую черту... если вы просто вызываете System.out.println(SpecialCharacter.NEWLINE.getCharAsString());
вы получите результат \\n
\r
Это так просто:
Как только вы пройдете линию
String s = "\n";
s будет содержать один новый символ строки, и вы ничего не сможете с этим поделать. Очевидно, вы можете создать новую строку и заменить все новые строковые символы на "\n", но я не думаю, что вы хотели.
Насколько я знаю, вы не можете. Проблема в том, что "\n" - один символ. Единственная обратная косая черта - это побег.
char ch = '\n'; // <-- not two characters. it one.
We can't change the string to add additional escape character.
Я думаю, это невозможно, потому что \n
имеет особое значение при использовании в String. Удалите обратную косую черту с двойной обратной косой чертой, подобной этой \\n
Это даст вам длину как 2
String str = "\\n";
System.out.println(str.length());
Или попробуйте использовать apache commons-lang
StringEscapeUtils#escapeJava()
Просто используйте другой\символ infront\n для преобразования \n (новая строка) в \n два символа