удаление пробелов в строке - PullRequest
3 голосов
/ 10 февраля 2012

мне нужно избавиться от больше, чем 1 пробел , то есть, если есть более 1 пробела, я заменил его одним пробеломЭто то, как я это сделал, но я действительно запутался, что является лучшим способом сделать это и в чем разница во всем этом.ниже мой код:

     public class SspaceDemo {

public static void main(String[] as) {
    String s="  Hi this   space  Demo   ";

    String  s1 = s.replaceAll("\\s +", " ");
    System.out.println(s1.trim());
    String  s2 = s.replaceAll(" +", " ");
    System.out.println(s2.trim());
    String  s3 = s.replaceAll(" {2,}", " ");
    System.out.println(s3.trim());
}
}

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

Ответы [ 7 ]

10 голосов
/ 10 февраля 2012

Это лучший способ.

   s = s.replaceAll("\\s+", " ");

** Что это значит \ s +?

\ s + - это регулярное выражение. \ s соответствует пробелу, табуляции, новой строке, возврату каретки, подаче формы или вертикальной табуляции, а + говорит «один или несколько из них». Таким образом, приведенный выше код свернет все «подстроки пробелов» длиннее, чем один символ, с одним пробелом. **

3 голосов
/ 10 февраля 2012

Я бы пошел с replaceAll(" {2,}", " ").Я бы также позвонил trim(), прежде чем звонить replaceAll.Я думаю, это приведет к наименьшему количеству фактических замен, которые могут иметь (очень) небольшое преимущество в скорости.

Однако все они в значительной степени эквивалентны, и если вы не сделаете это лот в узком цикле, просто выберите тот, который работает, и продолжайте.Если вы действительно беспокоитесь о производительности, вам, вероятно, следует сканировать посимвольные символы самостоятельно.Это намного больше, чем программирование, но, вероятно, оно будет выполняться быстрее, чем мощные механизмы регулярных выражений, связанные с replaceAll.

3 голосов
/ 10 февраля 2012

Вы можете использовать метод StringUtils.deleteWhitespace () из commons-apache.

@ см. http://commons.apache.org/lang/api-2.3/org/apache/commons/lang/StringUtils.html#deleteWhitespace%28java.lang.String%29

Лично я бы не использовал регулярные выражения для этой цели.

Веселитесь!

2 голосов
/ 10 февраля 2012

"\\s +" и " +" немного отличаются: первый захватывает любой пробел (табуляции, пробелы являются основными), за которым следует хотя бы один пробел, а второй захватывает только пробелы.Что касается + или {2,}, последний может быть немного более эффективным, но первый более читабелен.Я бы предпочел это.

0 голосов
/ 12 марта 2014
    public static String removeExtraWhiteSpaces(String str){
        String myString = str.replaceAll("\\s+", " ").trim();
        return myString;
    }

    public static String removeAllWhiteSpaces(String str){
        String myString = str.replaceAll("\\s+", "").trim();
        return myString;

    }
0 голосов
/ 10 февраля 2012

попробуйте с этим

String str=s.replaceAll("[^\\p{Print}]","");
System.out.println(str);
0 голосов
/ 10 февраля 2012

Я думаю, что правильное регулярное выражение для поиска будет:

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