2014-11-12 2 views
1

У меня есть ниже кодSpliting строка по характеру, возвращаясь с неопределенными значениями

String str= new String("aaa,,bbb,,ccc,"); 
String[] strArray= str.split(","); 

От этого я получаю ниже значений в strArray

strArray = [aaa,'',bbb,'',ccc]; 

Но я хочу ниже выхода

strArray = [aaa,null,bbb,null,ccc,null]; 

Я написал свою собственную функцию, чтобы сделать это, но я хочу знать, есть ли какой-либо стандартный метод, который может дать t его выход?

Если да, то пожалуйста, предложить

Если нет, то предложите, если какие-либо улучшения в приведенном ниже коде.

public List<String> splitStr(String str, char character) { 
    List<String> list = null; 
    if (StringUtil.isNotEmpty(str)) { 
     list = new ArrayList<String>(); 
     int i; 
     char ch; 
     int characterIndex, loopStartingIndex = 0; 

     if (str.charAt(0) == character) { 
      list.add(null); 
     } else { 
      list.add(str.substring(0, str.indexOf(character))); 
      loopStartingIndex = str.indexOf(character); 
     } 

     int length = str.length(); 
     for (i = loopStartingIndex; i < length; i++) { 
      ch = str.charAt(i); 
      if (ch == character) { 
       characterIndex = str.indexOf(character, i+1); 
       if (characterIndex == i+1 || characterIndex == -1) { 
        list.add(null); 
       } else { 
        list.add(str.substring(i+1, characterIndex)); 
        i = characterIndex-1; 
       } 
      } 
     } 
    } 
    /*for (String s : list) { 
     System.out.println(s); 
    }*/ 

    return list; 
} 

Edit:

Я тестировал код abc,,,, строки с str.split(",") методом, и я получил [abc], как выход, так что я думал, что aaa,,bbb,,ccc даст мне 3 значения раздельным методом. Но это дает [aaa,'',bbb,'',ccc] пропущенное окончание запятых.

+0

Возможный дубликат метода Java split() позволяет удалить пустые строки в конце?] (Http://stackoverflow.com/questions/545957/java-split-method-strips-empty-strings-at-the-end) –

+0

Да, мой ответ присутствует по этому вопросу. Извините, не удалось найти его. –

ответ

2

Вы можете передать отрицательное значение String.split(String, int) как

String str = "aaa,,bbb,,ccc,"; 
String[] strArray = str.split(",", -1); 
System.out.println(Arrays.toString(strArray)); 

выход является

[ааа,, ГЭБ, КТС,]

Это полезно задокументировано в связанном javadoc as,

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

Редактировать

public static void main(String[] args) { 
    String str = "aaa,,bbb,,ccc,"; 
    String[] strArray = str.split(",", -1); 
    for (int i = 0; i < strArray.length; i++) { 
     if (strArray[i].isEmpty()) { 
      strArray[i] = null; 
     } 
    } 
    System.out.println(Arrays.toString(strArray)); 
} 

Выход

[aaa, null, bbb, null, cc с, нулевая]

+1

OP хотите «нулевые» значения, которые необходимо установить между ними. – Maroun

+0

yourString.replace (",", ", null") –

+0

String [] strArray = str.split (",", -1); for (int i = 0; i

1

, как о чем-то простом

String str= new String("aaa,,bbb,,ccc,"); 
String[] strArray= str.split(",", -1); 

         This --  ^^ 
+0

Спасибо, ваше решение также полезно. –

0

написать как:

  String str= new String("aaa,,bbb,,ccc,"); 
     String[] strArray= str.split(","); 
     for(int i=0;i<strArray.length;i++) 
      System.out.print(strArray[i]); 

или

  System.out.print(Arrays.toString(strArray)); 

выход:

[aaa, , bbb, , ccc] 
0

Следующий код

String str = "aaa,,bbb,,ccc"; 
String[] strArray = str.split(","); 
System.out.println(Arrays.toString(strArray)); 

выходы [aaa, , bbb, , ccc], поэтому массив имеет 5 элементов, а не 3, как вы утверждаете. Единственное, что вам нужно сделать, - это цикл через массив и заменить пустые строки на нулевые ссылки, чтобы получить то, что вы хотите.

Вы можете передать отрицательное число в качестве второго аргумента split, но это только эффекты пустых строк в конце массива. С отрицательным числом также включается пустая строка в конце. То есть,

"aaa,,bbb,".split(",") 

возвращается ["aaa","","bbb"], в то время как

"aaa,,bbb,".split(",",-1) 

возвращается ["aaa","","bbb",""].

+0

Да, вы правы. На самом деле я протестировал код для строки 'abc ,,,,', и я получил abc как вывод, поэтому я думал, что 'aaa ,, bbb ,, ccc' даст мне 3 значения методом split. –

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