2014-08-28 6 views
1

Я написал небольшую программуЧтение новой строки в виде двух символов

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) Мы не можем изменить строку, чтобы добавить дополнительный символ эвакуации. 2) Мы не хотим использовать любую дополнительную библиотеку 3rd Party

+0

Почему вы не можете изменить строку? – ModDL

+0

@ModDL: Мы не можем изменить строку, поскольку она задана другим персонажем ... – Abhinav

ответ

0

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-Ланга

StringEscapeUtils#escapeJava() 
+1

Последнее предложение сообщения OP - * ПРИМЕЧАНИЕ. Мы не можем изменить строку, чтобы добавить дополнительный escape-символ. * –

+0

Спасибо за указывая, что отредактировано @ElliottFrisch – SparkOn

0

Насколько я знаю, вы не можете. Проблема в том, что «\ n» - один символ. Единственная обратная косая черта - это побег.

char ch = '\n'; // <-- not two characters. it's one. 
0

Это так просто:

После того, как вы идете мимо линии

String s = "\n"; 

s будет содержать один символ новой строки, и нет ничего, что вы можете с этим поделать. Вы можете создать новую строку и заменить все новые строковые символы на «\ n», но я не думаю, что это то, что вы хотели.

-1

Просто используйте другой символ \ Infront из \ п для преобразования \ п (новая линия) в \ п два символа

+0

Последнее предложение сообщения OP - * ПРИМЕЧАНИЕ. Мы не можем изменить строку, чтобы добавить дополнительный escape-символ. * –

1

Вы можете использовать класс 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, то вы можете написать свой собственный метод, чтобы сделать это. Вы можете просмотреть код вышеуказанного класса, чтобы увидеть пример того, как вы можете избежать строки для учета разных специальных символов.

+0

Я не хочу использовать дополнительную библиотеку. Можем ли мы обойтись без дополнительных библиотек? – Abhinav

+0

@Abhinav В этом случае вы можете написать свой собственный метод ... Вы можете посмотреть, как это делает класс. Он в основном разбирает каждый символ в строке и ускользает от него соответствующим образом. – manouti

0

Вы можете выполнить поиск по строке и заменить все символьные версии/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

+0

New Line - это просто пример, то же самое относится и к другим, также как '\ r' – Abhinav

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