2009-10-27 5 views
1

Я создал файл с объектом printStream, как показано ниже.анализ парсера в java

PrintStream outPutOffice = new PrintStream(
    new BufferedOutputStream(new FileOutputStream(inDir+"/Office.txt"))); 
outPutOffice.print(fValue + (findx < agtOffColCount ? "|" : "")); 

Теперь я должен прочитать его содержание и разделить его жетоны с помощью «|» как я написал токен с "|" разделены. Я пишу код, как показано ниже, он будет правильно читать строку, но не отдельный токен с «|» персонаж.

BufferedReader inPutAgent = new BufferedReader(
    new InputStreamReader(new FileInputStream(inDir+"/Office.txt"))); 

String column=inPutAgent.readLine(); 
String []columnDetail = column.split("|"); 

columndetail array содержит единственный символ в каждом индексе, вместо этого я хочу, чтобы в каждом индексе был один токен.

В чем проблема?

+0

Вы также можете узнать, в чем разница между Writer и OutputStream является. Взгляните на API FileWriter http://java.sun.com/j2se/1.5.0/docs/api/java/io/FileWriter.html –

ответ

6

метод split работает с регулярными выражениями и так как символ трубы (|) имеет особое значение и зарезервирован, вам нужно, чтобы избежать его, как это:

split("\\|"); 

Вы должны прочитать о regex here или here

+0

так может меняться (символ трубы) решит мою проблему? – lakhaman

+0

Я так думаю, дайте ему попробовать –

4

Вы должны изучить StringTokenizer, это очень удобный инструмент для таких видов работ.

Пример

StringTokenizer st = new StringTokenizer("this is a test"); 
while (st.hasMoreTokens()) { 
    System.out.println(st.nextToken()); 
} 

Это putput

this 
is 
a 
test 

Вы Второй конструктор для StringTokenizer установить разделитель:

StringTokenizer(String str, String delim)

Вы также можете нам еа Scanner как один из комментаторов сказал, что это может выглядеть примерно так

Пример

String input = "1 fish 2 fish red fish blue fish"; 

Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*"); 

System.out.println(s.nextInt()); 
System.out.println(s.nextInt()); 
System.out.println(s.next()); 
System.out.println(s.next()); 

s.close(); 

Выход будет

1 
2 
red 
blue 

Это означает, что он будет вырезать слово «рыба» и дать вам все остальное, используя «рыбу» в качестве разделителя.

examples taken from the Java API

+2

StringTokenizer (String str, String "|") Это будет означать строка с | как разделитель. –

+1

Проверьте Сканер, это намного лучше, чем StringTokenizer http://java.sun.com/j2se/1.5.0/docs/api/java/util/Scanner.html –

+0

Они оба работают очень хорошо, и я предлагаю любой из них над .split()! –

2

Аргумент для разделения - это регулярное выражение. Вы должны сделать:

String []columnDetail = column.split("\\|"); 

или:

String []columnDetail = column.split("[|]"); 
+0

спасибо за ваш ответ – lakhaman

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