Java字符串方法,用单个空格替换2个或更多空格的所有序列

Java字符串方法,用单个空格替换2个或更多空格的所有序列,java,string,replace,whitespace,stringbuilder,Java,String,Replace,Whitespace,Stringbuilder,我试图用一个空格替换字符串中两个或更多空格的所有序列 我已经使用String.trim().replaceAll(“+”,“”)方法得到了它 但我试着用我所知道的自己去弄清楚,我走近了,想知道是否有人能解决我的问题,让它工作 以下是我所尝试的: StringBuilder sampleTextBuilder = new StringBuilder(sampleText); for (int i = 0; i < sampleTextBuilder.length(); i++) {

我试图用一个空格替换字符串中两个或更多空格的所有序列

我已经使用String.trim().replaceAll(“+”,“”)方法得到了它

但我试着用我所知道的自己去弄清楚,我走近了,想知道是否有人能解决我的问题,让它工作

以下是我所尝试的:

StringBuilder sampleTextBuilder = new StringBuilder(sampleText);
for (int i = 0; i < sampleTextBuilder.length(); i++) {
            if (Character.isLetter(sampleTextBuilder.charAt(i))) {
                isLetter = true;
                isFirstWS = false;
            }
            else if (Character.isWhitespace(sampleTextBuilder.charAt(i)) && isLetter) {
                isFirstWS = true;
                isLetter = false;
            }
            else if (Character.isWhitespace(sampleTextBuilder.charAt(i)) && isFirstWS)  {
                sampleTextBuilder.deleteCharAt(i);
            }
            sampleText = sampleTextBuilder.toString();
}
StringBuilder sampleTextBuilder=新的StringBuilder(sampleText);
对于(int i=0;i
你真的不需要布尔人。只需跟踪指数即可。请记住,一次删除一个字符是昂贵的,因为使用这些
StringBuilder
方法会有相当多的数组复制

还有一个微妙之处。当您从头开始迭代并删除字符时,所有字符都会向左移动一个位置。这可能需要额外的簿记。要解决这个问题,您需要从右侧迭代。然后,当您删除一个字符时,它不会影响更靠左的字符的相对位置

String sampleText=“这是删除额外空格的测试”;
StringBuilder sampleTextBuilder=新的StringBuilder(sampleText);
对于(int i=sampleTextBuilder.length()-1;i>=0;i--){
如果(sampleTextBuilder.charAt(i)=''){
//找到一个空格,检查字符串的前后。
如果(i==sampleTextBuilder.length()-1 | | i==0){
sampleTextBuilder.deleteCharAt(i);
}
//否则,如果存在两个,则删除其中一个。
else if(sampleTextBuilder.charAt(i-1)=''){
sampleTextBuilder.deleteCharAt(i-1);
}
}
}
sampleText=sampleTextBuilder.toString();
System.out.println(“\”+sampleText+“\”);

你真的不需要布尔人。只需跟踪指数即可。请记住,一次删除一个字符是昂贵的,因为使用这些
StringBuilder
方法会有相当多的数组复制

还有一个微妙之处。当您从头开始迭代并删除字符时,所有字符都会向左移动一个位置。这可能需要额外的簿记。要解决这个问题,您需要从右侧迭代。然后,当您删除一个字符时,它不会影响更靠左的字符的相对位置

String sampleText=“这是删除额外空格的测试”;
StringBuilder sampleTextBuilder=新的StringBuilder(sampleText);
对于(int i=sampleTextBuilder.length()-1;i>=0;i--){
如果(sampleTextBuilder.charAt(i)=''){
//找到一个空格,检查字符串的前后。
如果(i==sampleTextBuilder.length()-1 | | i==0){
sampleTextBuilder.deleteCharAt(i);
}
//否则,如果存在两个,则删除其中一个。
else if(sampleTextBuilder.charAt(i-1)=''){
sampleTextBuilder.deleteCharAt(i-1);
}
}
}
sampleText=sampleTextBuilder.toString();
System.out.println(“\”+sampleText+“\”);

StringBuilder
中删除一个字符时,它会变短一个字符。因此,您的程序逻辑需要考虑
StringBuilder
的缩短长度,以便下一步处理
StringBuilder
。因此,这种方法会产生不必要的复杂性,而且容易出错。下面给出了一个简单的逻辑:

class Main {
    public static void main(String[] args) {
        String sampleText = "Arvind  Kumar   Avinash";
        StringBuilder sampleTextBuilder = new StringBuilder();
        for (int i = 0; i < sampleText.length(); i++) {
            sampleTextBuilder.append(sampleText.charAt(i));
            if (Character.isWhitespace(sampleText.charAt(i))) {
                // Simply skip (do nothing) the indexes until a non-whitespace is encountered
                while (i < sampleText.length() && Character.isWhitespace(sampleText.charAt(++i)));

                // Adjust the counter at the end of while loop
                i--;
            }
        }
        sampleText = sampleTextBuilder.toString();
        System.out.println(sampleText);
    }
}

上面给出的解决方案是直截了当的。此外,我还提出了一些意见,以进一步澄清这一点。如果有任何疑问,请随时发表评论。

当您在
StringBuilder
中删除一个字符时,它会变短一个字符。因此,您的程序逻辑需要考虑
StringBuilder
的缩短长度,以便下一步处理
StringBuilder
。因此,这种方法会产生不必要的复杂性,而且容易出错。下面给出了一个简单的逻辑:

class Main {
    public static void main(String[] args) {
        String sampleText = "Arvind  Kumar   Avinash";
        StringBuilder sampleTextBuilder = new StringBuilder();
        for (int i = 0; i < sampleText.length(); i++) {
            sampleTextBuilder.append(sampleText.charAt(i));
            if (Character.isWhitespace(sampleText.charAt(i))) {
                // Simply skip (do nothing) the indexes until a non-whitespace is encountered
                while (i < sampleText.length() && Character.isWhitespace(sampleText.charAt(++i)));

                // Adjust the counter at the end of while loop
                i--;
            }
        }
        sampleText = sampleTextBuilder.toString();
        System.out.println(sampleText);
    }
}

上面给出的解决方案是直截了当的。此外,我还提出了一些意见,以进一步澄清这一点。如果有任何疑问,请随时发表评论。

这是否回答了您的问题?是的,我就是这么用的。我想看看有没有办法做到这一点@WJS搞定了,这能回答你的问题吗?是的,我就是这么用的。我想看看有没有办法做到这一点@WJS搞定了。