2017-01-28 3 views
1

У меня есть текстовый файл с 2 строками словКак справиться с возвратом каретки, которая объединяет строки в конце и начале строки?

CCCCC,WIKY PODAR,130000,15 
DDDDD,XXXXX555,130110,30 

Программа читает каждое слово строки словесного разлитые и хранить их в массив.

проверка myStringArray.length возвращается: 7

Однако я ожидаю, что выход будет: 8

Вопрос заключается в том, что два слова в конце и начало строки сцепляются. Как отделить их и правильно хранить в массиве?

String fileName = "mac/text.txt"; 
    byte[] buffer = new byte[1000]; 
    FileInputStream inputStream = new FileInputStream(fileName); 
    while (inputStream.read(buffer) != -1) { 
     String testString2 = new String(buffer); 
     String delim2 = ","; 
     String[] token2 = testString2.split(delim2); 
     String[] myStringArray = new String[token2.length]; 
     for (int i = 0; i < token2.length; i++) { 
      myStringArray[i] = token2[i]; 
      token2[i]=token2[i].replaceAll("\\s+", ", "); 
          } 
     System.out.println(myStringArray.length); 
+1

один подход читается в одной строке, затем его токенизировать, читать следующую строку, а затем снова tokenize его –

ответ

1

Почему бы не загрузить все содержимое в строку и заменить в строке на строку-разделитель строки по "," характер? Затем вы можете легко разделить String одним разделителем ",".

Вы можете попробовать:

String content = new String(Files.readAllBytes(Paths.get("mac/text.txt"))); 
content = content.replaceAll(System.lineSeparator(), ","); 
String[] token2 = content.split(","); 

Или, если вы хотите, чтобы избежать вызова replaceAll() и выполнять непосредственно раскол вы можете указать в регулярном выражении , символов OR строку разделитель строки:

String content = new String(Files.readAllBytes(Paths.get("mac/text.txt"))); 
String[] token2 = content.split(",|"+System.lineSeparator()); 
1

Я думаю, вы должны разделить ваши строки с двумя разделителями, как это:

//delimiters with two separator , and space 
String delim2 = ",|\\ "; 
String testString2 = "CCCCC,WIKY PODAR,130000,15\n" + 
        "DDDDD,XXXXX555,130110,30"; 
String[] token2 = testString2.split(delim2); 
System.out.println(token2.length); 

Это должно 8 вместо 7, потому что мы используем два разделителей , и space.

EDIT

нормально это еще один способ узнать из файла и разделить его:

public static void main(String[] args) throws FileNotFoundException, IOException { 
    //path of your file 
    String fileName = "mac/text.txt"; 
    //read your String from your file like this : 
    String input = new String(Files.readAllBytes(Paths.get(fileName))); 
    System.out.println(input); 

    String delim = ",|\\ "; 
    String[] token = input.split(delim); 
    System.out.println(token.length); 
} 

Надеется, что это может помочь вам.

+0

Привет, Спасибо, что ответили, но длина по-прежнему 7, я читаю слова из текстового файла. – Snailwalker

+0

Вы можете распечатать то, что уже прочитали, потому что если вы установите эту строку так, чтобы вы получили 8, а не 7, возможно, ваш текст был diffirent, поэтому после того, как вы прочтете свой текст, напечатайте его @Snailwalker –

+0

@Snailwalker вы можете поместить свой код, который читается из файл? –

1

первая линия будет заканчиваться линия-разделитель (который отличается в операционной системе): смотри также this answer для более подробной информации

так, если он должен работать на Windows, Linux и Mac файлы, которые вы можете захотеть заменить линия-стоять с запятой, а затем разделить остальные так:

testString = testString.replaceAll("\r\n", ",").replaceAll("\r", ",").replaceAll("\n", ","); 
// now your string looks like this: CCCCC,WIKY PODAR,130000,15,DDDDD,XXXXX555,130110,30 
String[] token2 = testString.split(","); 
+0

Эй. этот рег кажется работой. но между WIKY и PODAR есть запятая. – Snailwalker

+0

Что ты имеешь в виду?между WIKY и PODAR есть пробел. Если вы хотите также заменить пробелы, просто добавьте вызов replaceAll. или если вы хотите заменить все пробелы (включая вкладки), вы можете заменить всю строку следующим: 'testString = testString.replaceAll (" \\ s ",", ");' – TmTron

+0

Я имею в виду, что моя программа выводит дополнительную информацию запятой в этом пространстве. Однако этого не должно быть. Спасибо. – Snailwalker

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