给出一个句子之间有多个空格的句子。删除多余的空格,使句子在单词之间只有一个空格

时间:2014-10-25 18:23:48

标签: java string whitespace space

问题很清楚。代码应该是Java而不使用正则表达式(如果有人没有注意到,那不是重复,我要求在没有正则表达式的情况下执行此操作)。

input: This is  a string     with more than   one space between words.

output: This is a string with more than one space between words.

有没有比这样做更好的方法?

public static String delSpaces(String str){
    StringBuilder sb = new StringBuilder(str);
    ArrayList<Integer> spaceIndexes = new ArrayList<>();

    for ( int i=0; i < sb.length(); i++ ){
        if ( sb.charAt(i) == ' ' && sb.charAt(i-1) == ' '){
            spaceIndexes.add(i);
        }
    }

    for (int i = 0; i < spaceIndexes.size(); i++){
        sb.deleteCharAt(spaceIndexes.get(i)-i);
    }
    return new String(sb.toString());
}

3 个答案:

答案 0 :(得分:11)

使用str.replaceAll("\\s+"," "); //使用正则表达式的最简单方法

第二种方式:

public static String delSpaces(String str){    //custom method to remove multiple space
        StringBuilder sb=new StringBuilder();
        for(String s: str.split(" ")){

            if(!s.equals(""))        // ignore space
             sb.append(s+" ");       // add word with 1 space

        }
        return new String(sb.toString());
    }
第三种方式:

public static String delSpaces(String str){
        int space=0;
        StringBuilder sb=new StringBuilder();
        for(int i=0;i<str.length();i++){
            if(str.charAt(i)!=' '){
                sb.append(str.charAt(i));  // add character
                space=0;
            }else{
                space++;
                if(space==1){       // add 1st space
                    sb.append(" ");
                }
            }
        }
        return new String(sb.toString());
    }

答案 1 :(得分:4)

str = str.replaceAll("\\s+", " ");可以使用正则表达式来实现这一目的。这比你必须为dos编写方法要快得多。

答案 2 :(得分:1)

class Try 
{
    public static void main(String args[])
    {
        String str = "This is  a string     with more than   one space between words.";
        char[] c = str.toCharArray();
        String str1 = "";
        for(int i = 0;i<str.length()-1;i++)
        {
            if((c[i] == ' '&& c[i+1] != ' ') || (c[i] != ' '))
                str1 += c[i];
        }

        System.out.println(str1);
    }
}

这很容易。