2013-10-03 3 views
1

Я использую Buffered Reader для передачи отдельных строк файла в Java StringTokenizer. Файл структурирован следующим образом:Как получить доступ к определенным токенам с помощью StringTokenizer Java?

"2,0";"12345";"foo";"foo.doc" 
"2,4";"23456";"foo";"foo.doc";"34567";"foo7";"foo7.doc";"45678";"foo6";"foo6.doc";"56789";"foo5";"foo5.doc";"67890";"foo4";"foo4.doc" 
"3,0";"34567";"foo7";"foo7.doc" 
"3,0";"45678";"foo6";"foo6.doc" 
"3,0";"56789";"foo5";"foo5.doc" 
"3,0";"67890";"foo4";"foo4.doc" 

Вот код, который я использую - до сих пор.

public class parse { 
    public static void main(String args[]) { 
    FileInputStream inputStream = new FileInputStream("whidata0.txt"); 
    BufferedReader br = new BufferedReader(new InputStreamReader(inputStream)); 
    while((scrubbedInput=br.readLine())!=null) { 
     StringTokenizer strTok = new StringTokenizer(scrubbedInput, ";", false); 
     int tokens = strTok.countTokens(); 
     while (strTok.hasMoreTokens()) { 
     tok01 = strTok.nextToken(); 
     } 
     System.out.println(" scrubbed: " + scrubbedInput); 
     System.out.println(" tokens: " + tokens); 
     System.out.println("  tok01: " + tok01); 
    } 
    } 
} 

Мне нужно уметь назначить каждый токен в строке переменной для выполнения дополнительных манипуляций. Однако, если я назначу эту переменную в моем цикле while, итерация перезапишет мои переменные, и все они вернутся с тем же значением.

Я пытаюсь разделим способ сделать следующее:

String token01 = strTok.tokenNumber(0); 
String token02 = strTok.tokenNumber(1); 
String token03 = strTok.tokenNumber(2); 
String token04 = strTok.tokenNumber(3); 
etc. 

, но не может найти любые методы, в документации строк Tokenizer, которые позволят это. Я могу, конечно, написать каждую строку массиву String из thisLineOfTokens[] и использовать цикл for для создания String tokenN = thisLineOfTokens[n], но есть ли более прямой способ доступа к определенным токенам?

Я как бы потерял лучший способ ссылки на конкретный токен из моей строки.

+0

НИКОГДА не используйте '' == для объекта Comparation, используйте '.equals()' – SJuan76

+0

правда Дат , правда, что ... но я просто избил псевдокод и поясню это в своем примере. – dwwilson66

ответ

2

Для этого вы можете использовать String.split вместо StringTokenizer.

String[] split = scrubbedInput.split(";"); 

split[2]; //index=2 
+0

Этот ответ правильный. Фактически @ dwwilson66 вы используете StringTokenizer неправильно. Он действует как итератор, вы пробиваете его и принимаете их значения. То, что вы специально хотите, это .split(), где вы можете вывести значение по определенному индексу. Плюс в JavaDocs они говорят использовать .split() вместо токенизатора. –

0

Информация от here:

Рекомендуется, чтобы кто-то ищет эту функцию использовать расколоть метод String, или java.util.regex пакет вместо этого.

Таким образом, вы можете использовать что-то вроде этого:

String testLine = "your;test;data;" 

String[] result = testLine.split(";"); 
for (int x=0; x<result.length; x++){ 
    System.out.println(result[x]); 
} 

Выход:

your 
test 
data 
Смежные вопросы