2013-07-13 3 views
0

Я попытался сделать регулярное выражение строковой декларации, где в любом месте перед объявлением присутствуют целые файловые пространства кода, а в некотором месте декларация начинается слева от строки без каких-либо пробелов ... Как я могу обрабатывать эти пробелы?Регулярное выражение для присутствующих пробелов

Просто нравится ..

  1. < --- пространства -------> Строка sVariable; // Пробелы, присутствующие перед объявлением //
  2. String sVariable; // Пробелы не присутствуют до объявления //

Я попытался как -. strLine.toUpperCase() спички (". STRING \ s") --- но он указывает 1-заявление. Как объявить регулярное выражение так, чтобы она как ..

ответ

0

Вы можете попробовать использовать

strLine.matches("(?i)\\s*STRING") 

В общем, означает X0 или более раз. (?i) - это флаг для игнорирования случая.

Хотя вы могли бы также рассмотреть вопрос о

strLine.trim().equalsIgnoreCase("STRING") 

Обратите внимание, что если вы собираетесь использовать определенный регулярное выражение несколько раз, вы должны предварительно скомпилировать его с помощью Pattern.compile() и использовать Matcher.

+0

Использование 'матчей()' в 'String' не является хорошей практикой, он компилирует регулярное выражение каждый раз, когда он выполняет, который является избыточным. Хорошей практикой является использование 'Pattern.compile()', а затем получить объект 'Matcher' и вызвать' matcher.matches() ' – user12458

+0

@JavaTechnical. Я знаю, что я пытался меньше отступить от того, что OP уже делал , но я запомню это. – arshajii

0

Вам нужно что-то вроде этого, чтобы учитывать пробелы до String и пространства сразу после него: \\s*String\\s+(\\w+) (он будет также захватить имя переменной

тестовую программу:.

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class test { 

    static final Pattern stringDeclaration = Pattern.compile("\\s*String\\s+(\\w+)"); 

    static void match(String s) 
    { 
     Matcher m = stringDeclaration.matcher(s); 
     if(m.find()) 
      System.out.println("Found variable: " + m.group(1)); 
     else 
      System.out.println("No match for " + s); 
    } 

    public static void main(String[] args) { 
     match(" String s1;"); 
     match("String s2;"); 
     match(" String  s3;"); 
     match(" String s4 ;"); 
     match(" String s5; "); 
    } 
} 

Есть также . количество онлайн обычных тестеров выражение мне нравится один в http://www.regexplanet.com/advanced/java/index.html

0

Просто используйте String.matches() как таким образом:.

if (strLine.matches("\\s*String\\s.*")) 

Регулярное выражение для matches() должен соответствовать весь строку , так вот почему есть .* в конце.

Это регулярное выражение позволяет для не пространства полукокса, как вкладки, после «Строка»

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