Использование «Предопределенных классов символов» в подстроке - PullRequest
0 голосов
/ 31 января 2012

Я хочу проверить последний символ строки на наличие символов, которые не являются символами, не являющимися словами, используя '\ W', и разрешить определенные символы, такие как ".,! И т. Д." В верхней части головы, которые я подумал об использовании код похож на этот.

Boolean notCompleted = true;
           int deduct = 1;
           while(notCompleted){
               if(string.charAt(string.length() -deduct) == '\W'){ // '\W' <-- doesn't work since it accepts anything other than "escape sequences".
                   if(string.charAt(string.length() -deduct) == '.'||string.charAt(string.length() -deduct) == ','||string.charAt(string.length() -deduct) == '!'){
                       //Do nothing and move on to the while loop
                   }else{
                       //Replace the non word character with ' '.
                   }
               }
               deduct++;
               if(deduct >= html.length()){
                   notCompleted = false;
               }
           }

Причина, по которой это не работает, заключается в том, что при использовании string.charAt допускается только «Escape-последовательность».

У меня вопрос, есть ли другой способ сделать это, а не делать.

string.replaceAll("\W", "");

Все предложения с благодарностью. Спасибо.

Благодаря подсказке, которую мне дал npinti, я создал этот код. Однако я получаю строку ошибки

Желаемый результат fakeNewString в соответствии с запросом должен быть "! Asdsdefwef., A ,, sda.sd";

fakeNewString = sb.toString(); // NullPointerException

public static void test5(){
        Boolean notCompleted = true;
        String fakeNewString = "!@#$%^&*( asdsdefwef.,a,,sda.sd";
        int start = 0, end = 1;
           StringBuilder sb = null;
           try{

        while(notCompleted){
               start++;
               String tempString = fakeNewString.substring(start, end);
               if(Pattern.matches("\\W$", tempString)){
                   if(Pattern.matches("!", tempString)||Pattern.matches(".", tempString)||Pattern.matches(",", tempString)||Pattern.matches("\"", tempString)){
                       //do nothing
                       sb.append(tempString);
                   }else{
                       //Change it to spaces.
                       tempString = " ";
                       sb.append(tempString);
                   }
               }
               end++;
               if(end >= fakeNewString.length()){
                   notCompleted = false;
                   fakeNewString = sb.toString();
                   System.out.println(fakeNewString);
               }
           }

       }catch (Exception e) {
        // TODO: handle exception
           e.printStackTrace();
       }
}

Ответы [ 3 ]

2 голосов
/ 31 января 2012

Вы можете сделать что-то вроде этого:

Pattern pattern = Pattern.compile("\\W$");
Matcher matcher = pattern.match(string);

if (matcher.find())
{
    //do something when the string ends with a non word character
}

Посмотрите этот учебник для получения дополнительной информации о регулярных выражениях.

1 голос
/ 31 января 2012

Давайте попробуем разбить вопрос (желание) и ответить на него:

Я хочу проверить последний символ строки на наличие символов, не являющихся не-словесными, используя '\ W' и разрешить определенные символы, такие как ".,! Etc"


Сначала имеем:

Я хочу проверить последний символ строки

Выражение для символа X в конце строки:

X$

Тогда:

для символов, не являющихся несловесными символами

Выражение:

[^\W] т.е. \w

А также:

разрешить определенные символы, такие как ".,! Etc"

Добавлено к выражению выше:

[\w.,!]

И объединенный конечный результат:

[\w.,!]$

Та-да! (Хотя я предполагаю, что OP ищет что-то еще, я сделал это для lulz.)

1 голос
/ 31 января 2012

Вы можете использовать String.replaceAll немного по-другому, чтобы сделать это.Он достигает того же эффекта, что и код, который вы пытаетесь написать, что кажется сложным решением для простой проблемы.Попробуйте этот код:

string.replaceAll("[^\\w!,.]", " ");

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...