2015-05-02 5 views
-2

У меня есть вопрос здесь. Мне нужно открыть текстовый файл и распечатать вывод в соответствии с шаблоном, который я хочу. Я использовал метод шаблона регулярного выражения, чтобы получить желаемый шаблон. Я удаляю фигурные скобки, запятые и brackets.I удалось сделать это, но я не знаю, почему мой код не печатает из последней строки ..Не удается распечатать окончательные данные в строке

данные в текстовый файл будет как этот

[{8} , {11} , {19} , {21}  ,  {34, 
20, 
33, 
26, 
17, 
35, 
36, 
49, 
4, 
48, 
39, 
1, 
10, 
41, 
14, 
9, 
7, 
16, 
46, 
45, 
29, 
3, 
44, 
43, 
38, 
37, 
13, 
22, 
23, 
47, 
25, 
40, 
2, 
5, 
15, 
18, 
30, 
28, 
42, 
50, 
12, 
32, 
24, 
6, 
31, 
27}] 

Мой код Как следует

import java.io.BufferedReader; 

import java.io.File; 

import java.io.FileNotFoundException; 

import java.io.FileReader; 

import java.io.IOException; 

import java.util.ArrayList; 

import java.util.List; 

import java.util.regex.Matcher; 

import java.util.regex.Pattern; 

import javax.swing.JFileChooser; 


public class ClusterLine { 
private static File f; 

public static void main(String[] args) throws FileNotFoundException, IOException { 



    String sentence = ""; 
    try { 


     JFileChooser chooser = new JFileChooser(); 
     chooser.showOpenDialog(null); 
     f = chooser.getSelectedFile(); 
     String filename = f.getAbsolutePath(); 
     FileReader fr = new FileReader(f); 
     BufferedReader br = new BufferedReader(fr); 

     sentence = br.readLine(); 





     Pattern p = Pattern.compile("\\{(.*?)\\}"); 
     Matcher m = p.matcher(sentence); 
     while (m.find()) { 

      System.out.println(m.group(0).replace(",", "").replaceAll("\\{", "").replaceAll("\\}", "")); 
     } 

я должен получить такой вывод, если использование выше кода

8 

11 

19 

21 

34 20 33 26 17 35 36 49 4 48 39 1 10 41 14 7 16 46 

Но мой вопрос вот почему я не могу получить результат, как выше? Заключительная строка missing.I может получить только такой вывод.

8 

11 

19 

21 

Есть ли какие-либо ошибки в методе, который я использовал? Надеюсь, что кто-то может помочь me..Tq

+0

Пожалуйста, отредактируйте ваш вопрос, чтобы сделать его доступным для чтения. –

+0

ok..i отредактируйте это готово .. :) – CHANDRAN

+0

Нет, ваши данные все еще не читаются. Отступ тоже. –

ответ

1

Вы можете сделать это с помощью сопоставления с образцом.

Здесь решение:

public static void main(String[] args) { 
    String newString = "[{124}, {126}, {12, 14}, {13, 18, 130, 113}]"; 
    Pattern p = Pattern.compile("\\{(.*?)\\}"); 
    Matcher m = p.matcher(newString); 
    while(m.find()) 
    { 
     System.out.println(m.group(1).replace(",", "")); 
    } 
} 

Выход будет:

124 
126 
12 14 
13 18 130 113 

ДОБАВЛЕНО

Для меня код ниже доходности, как и ожидалось:

public static void main(String[] args) throws ParseException { 
     String newString = "[{8} , {11} , {19} , {21} , {34, 20, 33, 26, 17, 35, 36, 49, 4, 48, 39, 1, 10, 41, 14, 9, 7, 16, 46, 45, 29, 3, 44, 43, 38, 37, 13, 22, 23, 47, 25, 40, 2, 5, 15, 18, 30, 28, 42, 50, 12, 32, 24, 6, 31, 27}]"; 
     Pattern p = Pattern.compile("\\{(.*?)\\}"); 
     Matcher m = p.matcher(newString); 
     while(m.find()) 
     { 
      System.out.println(m.group(1).replace(",", "")); 
     } 
} 

Выход будет:

8 
11 
19 
21 
34 20 33 26 17 35 36 49 4 48 39 1 10 41 14 9 7 16 46 45 29 3 44 43 38 37 13 22 23 47 25 40 2 5 15 18 30 28 42 50 12 32 24 6 31 27 

Вы должны проверить переменную:

sentence = br.readLine(); 

ДОБАВЛЕНО 2

У вас есть разрывы строк в файле.Поэтому вы должны удалить это из своей строки:

newString = newString.replace("\n", "").replace("\r", ""); 
Pattern p = Pattern.compile("\\{(.*?)\\}"); 
Matcher m = p.matcher(newString); 
while(m.find()){ 
    System.out.println(m.group(1).replace(",", " ")); 
} 
+0

. Я передам метод getCLuster() в строку, а затем попытаюсь сделать что-то вроде yours.thx alot .. – CHANDRAN

+0

Если это правильное решение. Пожалуйста, отметьте это как правильный ответ, пожалуйста. – edubriguenti

+0

да .. соответствие шаблону было правильным способом сделать это. Tq – CHANDRAN

0

можно сделать следующим образом:

  1. Split на ,. Таким образом, вы получите aray.
  2. На каждом элементе массива удаляются фигурные скобки.
  3. Запуск цикла.

И имеют следующий псевдокод в цикле:

bw.write(arra[i]); 
bw.newLine(); 
+0

okay..i попробует .. .. спасибо. – CHANDRAN

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