2014-02-08 5 views
0

Мне пришлось экспортировать кучу строк в CSV, который я открыл в Excel. содержатся строки «\ п» и «\ т», которые мне нужно было включен в CSV, так что я сделал следующее перед экспортом данных:Вывод новой строки для печати снова

public static String unEscapString(String s) 
{ 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < s.length(); i++) 
    { 
     switch (s.charAt(i)) 
     { 
      case '\n': sb.append("\\n"); break; 
      case '\t': sb.append("\\t"); break; 
      default: sb.append(s.charAt(i)); 
     } 
    } 
    return sb.toString(); 
} 

Проблема заключается в том, что я теперь импортируйте данные в Java, но я не могу понять, как снова вернуть новую строку и вкладку. Я пробовал:

s.replaceAll("\\n", "\n"); 

но он по-прежнему игнорирует новые строки. Помогите?

EDIT: Пример того, что я пытаюсь сделать:

Say одна строка в CSV является "Foo \ п бар". Когда я импортировать его с помощью Java и я пытаюсь напечатать ту же строку в консоли, но есть символ новой строки ведут себя корректно

+0

Не могли бы вы предоставить образец 's' и результат' replace'? – jpmc26

+0

отредактировал op с помощью примера – user1217222

ответ

2

replaceAll первый аргумент - регулярное выражение. У вас есть 2 варианта. Вы можете использовать обычный старый replace так:

s.replace("\\n", "\n"); 

или вы можете слеш для регулярных выражений синтаксического анализа (который вскрышных единственный слэш выход):

s.replaceAll("\\\\n", "\n"); 

или

s.replaceAll(Pattern.quote("\\n"), "\n"); 

Я бы выбрал replace, так как вы не используете регулярное выражение.

+0

Спасибо! Это был именно тот случай – user1217222

+0

@ user1217222 Рад, что я мог бы помочь. – jpmc26

1

Это должно быть

sb.append("\n"); 

В противном случае, вы получите '\' и 'n' по используя "\\n".


Но я рекомендую вам использовать:

sb.append(System.getProperty("line.separator")); 

Здесь System.getProperty("line.separator") дает независимую платформу новой строки в Java. Также из Java 7 существует метод, который возвращает значение напрямую: System.lineSeparator().

+0

Я считаю, что 'unEscapString' работает по назначению, хотя и плохо назван. Он превращает фактические символы новой строки в текст '\ n'. (Другими словами, он избегает строки для экспорта.) Обратите внимание на символы новой строки и табуляции в операциях 'case'. Проблема заключается в попытке вернуть фактические символы новой строки. – jpmc26

+0

Соглашения об именах в стороне, jpmc26 является правильным в том, что я пытаюсь сделать – user1217222

0

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

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