2016-08-12 4 views
0

Я собираю типы данных столбцов из файлов с помощью Java. Некоторые файлы разделены на вкладку, а некоторые разделены запятой. Приехал со следующим кодом:String.split() - Как различать значения разделенных вкладками и значения, разделенные запятыми?

String[] valuesFromColumns = null; 
        if (line.split("\\s*\\t\\s*") != null) { 

        System.out.println("Separating by tab: " + line); 
          valuesFromColumns = line.split("\\s*\\t\\s*"); 

        } else if(line.split("\\s*,\\s*")!=null) { 
        System.out.println("Separating by comma." + line); 
          valuesFromColumns = line.split("\\s*,\\s*"); 
        } 

        for(String s : valuesFromColumns) { 
         this.extractDataTypeFromTheLine(s); 
       } 

Выхода не то, что ожидалось: это ошибки через запятую файлов для табуляции разделенных значений. Что я могу делать неправильно? Вот результат:

/Users/macbook/open_data_us/GPL94-tbl-1.txt 
Separating by tab: 67023_at AI342132  Homo sapiens Mar 11, 2009 Consensus sequence GenBank Cluster Incl. AI342132:qt26c08.x1 Homo sapiens cDNA, 3' end /clone=IMAGE-1949102 /clone_end=3' /gb=AI342132 /gi=4079059 /ug=Hs.156499 /len=414 AI342132        
String 
String 
String 
... 
/Users/macbook/open_data_us/Performance Metrics - Transportation.csv 
Separating by tab: Alley Pot Hole,06/06/2011,Week,10,1.65,3,06/06/2011 - 06/12/2011 
String 
/Users/macbook/open_data_us/redditSubmissions.csv 
Separating by tab: 0,1333178161,2012-03-31T14:16:01.093638-07:00,Expectation,35,rmun4,29,GifSound,6,1333203361,23,3,Gangsta_Raper 
String 
+0

Я действительно не понимаю, что делает ваш код неправильно, но я обнаружил ошибку. 'split()' никогда не вернет 'null'. Если 'String' не содержит выражения, он вернет массив с одной строкой с' String' в первой позиции: https://docs.oracle.com/javase/7/docs/api/java/lang/String .html # split (java.lang.String,% 20int) –

ответ

1

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

Следовательно, первое условие ais всегда верно.

+0

if (! line.split ("\\ s * \\ t \\ s *") [0] .equals (строка)) { \t \t \t \t \t \t \t System.out.println ("Разделение по вкладке:" + строка); \t \t \t \t valuesFromColumns = line.split ("\\ s * \\ t \\ s *"); \t \t \t \t \t \t \t} еще если (! Line.split ("\\ с * \\ с *") [0] .equals (линия)) { \t \t \t \t System.out.println («Разделение запятой» + строка); \t \t \t \t valuesFromColumns = line.split ("\\ s *, \\ s *"); \t \t \t} \t \t \t \t \t \t для (String S: valuesFromColumns) { \t \t \t \t this.extractDataTypeFromTheLine (ов); \t \t \t} –

+0

Я думаю 'if (line.contains (" \ t "))' легче читать и более эффективно, чем расщепление и сравнение результата со строкой. – Guenther

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