2014-07-04 7 views
0

У меня есть текстовый файл в то время как одна линия, как это:Как сделать локальную переменную доступной вне цикла в Java

"Execution Status: Pass"

Я хочу взять значение из: перейти отсюда.

Я использую ниже код:

String patternString1 = "(Execution) (Status:) (.*)"; 
Pattern patt1 = Pattern.compile(patternString1); 
BufferedReader r = new BufferedReader(new FileReader("c:\\abc.txt")); 
String line; 
while ((line = r.readLine()) != null) { 
    String g11 = null; 
    Matcher m1 = patt1.matcher(line); 
    while (m1.find()) { 
     g11=m1.group(3); 
     System.out.println(g11+"HI1"); //Line1 
    } 
    System.out.println(g11+"HI1"); //Line2 
} 

В то время как линия 1 дает желаемый результат, как «пройти» я не получаю это ожидаемый результат от линии 2. Может ли один из вас, пожалуйста, помогите мне доступ к локальной переменной из цикла?

+0

Где вы объявляющего 'g11'? – christopher

+0

за пределами внутреннего цикла while – Abuzar

+0

проще всего разделить 'line' с помощью' line.split (":"); ' –

ответ

0

Declare Строка g11 в качестве локальной переменной в начале вашего метода

String g11=""; -- declare g11 as a local variable 
    String patternString1 = "(Execution) (Status:) (.*)"; 
    Pattern patt1 = Pattern.compile(patternString1); 

Add the rest of your code here......... 
+0

thansk очень подходит для вашего ответа – Abuzar

0

могли бы попытаться изменить следующую строку:

while (m1.find()) 

к

if(m1.find()) 

Это должно дать результат, который вы хотите

+0

. Я не думаю, что меняет цикл из while если это решает проблему. Я пытался и не работал – Abuzar

+0

Какой выход? –

0

Как насчет простой способ:

String result = line.replaceAll(".*: ", ""); 

Эта строка говорит msgstr "заменить все до номер пробела без ничего" (т. е. удалить его).

+0

Привет Богемский, это не один текстовый файл. Он имеет много линий с разным характером. Поэтому я не могу использовать этот раскол. совпадение лучше в этом отношении, поскольку все, что я могу сказать – Abuzar

0

Если есть только один экземпляр этого совпадения в одной строке, то используйте if вместо while (m1.find()) loop или break цикл, соответствующий совпадению.

Пример кода:

while ((line = r.readLine()) != null) { 
    String g11 = null; 
    Matcher m1 = patt1.matcher(line); 
    if(m1.find()) { 
     g11=m1.group(3);    
    } 
    if(g11 != null){ 
     System.out.println(g11+"HI1"); //Line2 
    } 
} 
+0

Извините, Raj, это не совсем хорошая идея. что, если у нас есть другой ответчик m2, то эти условия недействительны – Abuzar

+0

@ user3777979 Я не знаю, что вы пытаетесь? – Braj

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