Regex не работает

1

Ниже приведена моя программа.

Я пытался заменить @, & ; , и . с пространством ().

Но я не могу получить правильный результат.

public static void main(String[] args) throws IOException {
        final String REG_EXPR = "[!\"#$%&'()*+-./:;<=>?@\\^_{|}~',.\\[\\]–]*";
        String Description="திகழ்கிறது.@;@;@;@;ஆனால் ஆனால் ";
        HashSet<String> line=new HashSet<String>();
        Scanner sc2 = null;
         sc2 = new Scanner(Description);
         while (sc2.hasNextLine()) {
         Scanner s2 = new Scanner(sc2.nextLine());
         boolean b;
         while (s2.hasNext()) {
                String s = s2.next();                   
                String s1 = s.replaceAll(REG_EXPR, "");       
                s1=s1.replaceAll("[a-zA-Z0-9\\s]", "");

                System.out.println("s1 value"+s1);

               }  
             }
           }

вывод

s1 valueதிகழ்கிறதுஆனால்
s1 valueஆனால்

ожидаемый результат

 s1 valueதிகழ்கிறது
 s1 valueஆனால்  
  s1 valueஆனால்
Теги:

4 ответа

1
Лучший ответ

Это прекрасно работает для меня:

public static void main(String[] args) {
    final String REG_EXPR = "[!\"#$%&'()*+-./:;<=>?@\\^_{|}~',.\\[\\]–]";
    String description="திகழ்கிறது.@;@;@;@;ஆனால் ஆனால் ";
    String s1 = description.replaceAll(REG_EXPR," ");
    Scanner scanner = new Scanner(s1);
    while (scanner.hasNext()){
        System.out.println("s1 value " + scanner.next());
    }
}

Проверьте это здесь http://ideone.com/omjhHM

  • 0
    спасибо за ваш хороший ответ
0

Попробуйте и сделайте это:

private static final Pattern PATTERN = Pattern.compile("\\p{IsL}+");

// ...
final Matcher m = PATTERN.matcher(description);
while (m.find())
    System.out.println(m.group());
  • 0
    я получил java.util.regex.PatternSyntaxException
  • 0
    Ок, см редактировать, должно работать
Показать ещё 4 комментария
0

Проблема в обработке класса сканера

Первый фрагмент строки, который вы получаете, - "திகழ்கிறது. @; @; @; @; ஆனால்", и он правильно выполняет регулярное выражение, а ожидаемый результат - "திகழ்கிறதுஆனால்",

Дайте пробел здесь "திகழ்கிறது. @; @; @; @; ஆனால்" и попробуйте, вы получите правильный результат.

попробуй это,

final String REG_EXPR = "[! \" # $% & '() * + -./:; <=>? @\^ _ {|} ~',.\[\] - a-zA-Z0-9\\с] ";

замените цикл while ниже,

                  while (s2.hasNext()) {
                         String s = s2.next();                   
                         String []s1 = s.split(REG_EXPR);
                      for(int i=0 ;i<s1.length;i++ )
                         if(s1[i].length()>0)
                             System.out.println("s1 value"+s1[i]);

                        }  
  • 0
    @; @; @; @; Но этот текст фиксируется с сервера
-2

Не забудьте избежать регулярных выражений, таких как *+? к \\*\\+\\? , В противном случае они будут использоваться для определения длины совпадающего образца. То есть ? означает occurs zero or one times, + означает one or more times, * означает any times (zero, one or more).

  • 0
    Нет необходимости избегать любого из них внутри класса персонажа

Ещё вопросы

Сообщество Overcoder
Наверх
Меню