Обработка символа новой строки при вводе между Windows и Linux - PullRequest
5 голосов
/ 09 марта 2010

Я думаю, что это стандартная проблема, которую, возможно, задавали раньше, но я не мог получить точный ответ, поэтому размещаю проблему.

Проблема в том, что наш сервер работает под управлением Linux. Мы обращаемся к серверу через браузер в окне, чтобы ввести данные в поле, которое должно содержать несколько строк, которые пользователь может ввести, нажимая клавишу ввода после каждой строки азбука Защита ГХИ

Когда это поле ввода (это текстовая область) читается на машине linux, мы хотим разделить данные на основе символа новой строки.

У меня было три вопроса по этому вопросу.

  1. Содержат ли входящие данные "\ r \ n" или "\ n"

  2. Если входящие данные содержат "\ r \ n", свойство linux line.separator (свойство vm) не будет работать для меня, так как оно скажет "\ n" и поэтому может оставить "\ r" данные.

  3. Если в данных оставить «\ r», если я открою файл на компьютере с Windows, это будет означать символ новой строки?

Наконец, кто-нибудь может сказать мне стандартный способ решения этой проблемы?

Ответы [ 5 ]

3 голосов
/ 09 марта 2010

Стандартные java.io.DataInputStream и java.io.BufferedInputReader оба обрабатывают это автоматически с помощью метода readLine (). Вы действительно не должны использовать DataInputStream для этого, так как он не поддерживает правильные наборы символов и его readLine () давно устарела.

Для вывода текста вы можете использовать java.io.PrintWriter, в котором это printLn (), и связанные методы с параметрами, для вывода правильной последовательности новой строки для текущей платформы. java.io.BufferedWriter также обрабатывает это правильно и предоставляет метод public newLine ().

3 голосов
/ 09 марта 2010

Linux использует \n.
Windows использует \r\n.

Поэтому, если вы не настроили что-то в Linux, оно должно появиться в \n.

Вы можете вычленить \r\n и \n и заменить на то, что хотите, чтобы избежать проблемы 3.

http://en.wikipedia.org/wiki/Newline

1 голос
/ 18 ноября 2016

Вместо использования регулярных выражений вы также можете упростить его, выполнив что-то вроде.

StringBuilder sb=new StringBuilder();
// append your texts here and to go to a new line use
    if(System.getProperty("os.name").startsWith("Windows")){

                sb.insert("\r\n");
            }
            else {
            sb.insert("\n");
    }

Так что, если ваша локальная среда - Windows, вы можете настроить ее локально, а также, если вы будете развертывать ее в другой среде на основе Linux.

0 голосов
/ 09 марта 2010

Спасибо за ответ, ребята. Наконец, посмотрев на предложение, данное Кевином, мы использовали над ним StringReader и BufferedReader, чтобы преодолеть проблему. Мы использовали средство чтения строк, поскольку данные читаются как строки из запроса.

Надеюсь, этот вопрос поможет людям в будущем

0 голосов
/ 09 марта 2010

Вероятно, попробуйте это?

String[] lines = inputString.split("\r?\n");

Не уверен на 100% в синтаксисе, но основная идея регулярного выражения: «ноль или один \ r, и ровно один \ n». Или, если вы просто хотите нормализовать ввод:

inputString = inputString.replace("\r?\n", "\n");

Мне не очень больно. ; -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...