Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 给出一个单词之间有多个空格的句子。去掉多余的空格,这样句子的单词之间就只有一个空格了_Java_String_Whitespace_Space - Fatal编程技术网

Java 给出一个单词之间有多个空格的句子。去掉多余的空格,这样句子的单词之间就只有一个空格了

Java 给出一个单词之间有多个空格的句子。去掉多余的空格,这样句子的单词之间就只有一个空格了,java,string,whitespace,space,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 s

问题很清楚。代码应该是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());
}
使用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());
    }
使用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());
    }
str=str.replaceAll\\s+;用正则表达式就可以了。这比您必须将方法写入dos要快得多。

str=str.replaceAll\\s+;用正则表达式就可以了。这比您必须将方法写入dos要快得多

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);
    }
}
这很容易做到



这很容易做到

Rustam,StringBuilder没有用于字符串的replaceAll方法。而replaceAll使用Regex,我不希望这样。无论如何,谢谢。我看到你的str是String而不是StringBuilder。是的,但它是方法参数,你不希望有人将StringBuilder作为参数传递,我用字符串在方法内实例化了一个SB对象。@oudouz check updatedcode@oudouz希望第二个答案就是你想要的Rustam,StringBuilder没有用于字符串的replaceAll方法。而replaceAll使用Regex,我不希望这样。无论如何,谢谢。我看到你的str是String而不是StringBuilder。是的,但它是方法参数,你不希望有人将StringBuilder作为参数传递,我用字符串在方法内实例化了一个SB对象。@oudouz check updatedcode@oudouz希望第二个答案就是你想要的。我知道它更快,但我需要一个算法。我想写我自己的方法。我知道它更快,但我想要一个算法。我想编写自己的方法。String.replaceAll使用正则表达式作为第一个参数prakar.oudouz,可能是这样help@Prakhar避免在循环内向字符串变量添加字符,因为每次都会创建新字符串。最好使用StringBuilder或StringBufferyeah true。。感谢yString.replaceAll使用regex作为第一个参数prakar.oudouz,可能是这样help@Prakhar避免在循环内向字符串变量添加字符,因为每次都会创建新字符串。最好使用StringBuilder或StringBufferyeah true。。谢谢你