2009-10-14 2 views
1

как использовать Java StringTokenizer для следующей строкиКак использовать java stringtokenizer?

| feild1 | field2 || Field4 | ...

я хочу Java взять заготовку как поле тоже, но StringTokenizer пропускает его.

Любая опция для его получения.

+0

Что вы используете как токен? – Geo

+0

Я использую символ трубы | – someguy

ответ

10

Вам действительно нужен токенизатор? Почему бы не разделить строку на массив? Таким образом, у вас тоже будут пустые поля.

String fields = "bla1|bla2||bla3|bla4|||bla5"; 
String[] field = fields.split("\\|"); // escape the | because split() needs a regexp 
+2

Обратите внимание, что это будет игнорировать конечные пустые поля (т. Е. «Bla5 ||» возвращает 'new String [] {" bla5 "}' –

+0

Thanx это сработало. :) – someguy

+4

@Aaron Digulla: это можно исправить. Используйте .split ("\\ |", -1), чтобы получить завершающие пустые поля –

3

Без StringTokenizer использования String.split():

for (String a : "|1|2||3|".split("\\|")) { 
    System.out.println("t="+a); 
} 

Обновление: забыл выпускаемый (как обычно). +1 голос.

+2

Вам нужно будет избежать '|'. –

15

Как насчет java.util.Scanner? Гораздо более мощным, чем StringTokenizer, введенный в Java 5 и по большей части неизвестна или недооцененный:

Scanner scanner = new Scanner("1|2|3|||6|"); 
scanner.useDelimiter("\\|"); 
while (scanner.hasNext()) { 
    System.out.println(scanner.next()); 
} 

EDIT: Он может даже разобрать Интс (и другие типы) непосредственно, как это:

Scanner scanner = new Scanner("1|2|3|||6|"); 
scanner.useDelimiter("\\|"); 
while (scanner.hasNextInt()) { 
    int x = scanner.nextInt(); 
    System.out.println(x); 
} 
+1

Теперь это круто. –

+1

Определенно неизвестно мне и недооценено. Благодарю. – pimpf0r

+0

Год 2012, и его еще непопулярный! Никогда не знал, что это существовало! – frappuccino