删除String中的连续空格而不使用trim()和replaceAll()

时间:2013-04-06 09:28:32

标签: java string

我必须从给定字符串中删除前导和尾随空格,以及组合连续的空格。例如,

String str = "    this is    a   string  containing numerous  whitespaces   ";

我需要将其作为:

返回
"this is a string containing numerous whitespaces";

但问题是我无法使用String#trim()。 (这是一个家庭作业,我不允许使用这样的方法。)我目前正在尝试逐个访问每个角色,但很不成功。

我需要一个优化的代码。有人可以帮忙吗?我需要它在今天完成:(

8 个答案:

答案 0 :(得分:5)

编辑:在我们被告知无法使用replaceAll之前发布的答案。我将它留在这里,理由是它可能对其他读者有用,即使它对OP没用。

  

我需要一个优化的代码。

真的需要它被优化吗?你认为这是一个瓶颈吗?

这应该这样做:

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

这是一个正则表达式,用“用单个空格替换任何连续的空格”。它可能不是最快的,但我会在尝试其他任何事情之前对其进行基准测试。

请注意,这将用空格替换所有空格 - 因此,如果您有标签或其他空白字符,它们也将替换为空格。

答案 1 :(得分:2)

str = str.replaceAll(" +", " ").trim();怎么样?

如果您不想使用trim()(我真的没有理由不这样做),请将其替换为:

str = str.replaceAll(" +", " ").replaceAll("^ ", "").replaceAll(" $", "");`

答案 2 :(得分:2)

  

我不允许使用这些方法。我要用循环做这个   和所有。

所以如果你不能使用更快更有效的方式,我会为你写一些代码:

String str = "    this is    a   string  containing numerous  whitespaces   ";
StringBuffer buff = new StringBuffer();
String correctedString = "";
boolean space = false;
for (int i = 0; i < str.length(); i++) {
    char c = str.charAt(i);
    if (c == ' ') {
        if (!space && i > 0) {
            buff.append(c);
        }
        space = true;
    }
    else {
        buff.append(c);
        space = false;
    }
}
String temp = buff.toString();
if (temp.charAt(temp.length() - 1) == ' ') {
    correctedString = temp.substring(0, buff.toString().length() - 1);
    System.out.println(correctedString);
}
System.out.println(buff.toString())

注意:

但这是“har”并且只是为了“学习”。

更有效的方法是确保使用@JonSkeet和@BrunoReis指出的方法

答案 3 :(得分:0)

在不使用任何内置库函数的情况下删除空格 这只是一个固定数组大小的简单示例。

public class RemWhite{ 
public static void main(String args[]){ 
String s1=" world qwer ";
int count=0;
char q[]=new char[9];
char ch[]=s1.toCharArray();
System.out.println(ch); 

    for(int i=0;i<=ch.length-1;i++)
   {
     int j=ch[i];
     if(j==32)
     {
      continue;
     }
   else
      q[count]=ch[i];
      count++;

      } 
   System.out.println(q); 

  }} 

答案 4 :(得分:0)

删除单个或重新出现的空间。

public class RemoveSpace {
    public static void main(String[] args) {

        char space = ' ';
        int ascii = (int) space;

        String str = "    this is    a   string  containing numerous  whitespaces   ";
        char c[] = str.toCharArray();

        for (int i = 0; i < c.length - 1; i++) {
            if (c[i] == ascii) {
                continue;
            } else {
                System.out.print(c[i]);
            }
        }

    }

}

答案 5 :(得分:0)

如果您不想使用任何内置方法,请参阅

private static String trim(String s)
{
    String s1="";boolean nonspace=false;
    for(int i=0;i<s.length();i++)
    {
        if(s.charAt(i)!=' ' || nonspace)
        {
            s1 = s1+s.charAt(i);
            nonspace = true;
        }
    }
    nonspace = false;
    s="";
    for(int i=s1.length()-1;i>=0;i--)
    {
        if(s1.charAt(i)!=' ' || nonspace)
        {
            s = s1.charAt(i)+s;
            nonspace = true;
        }
    }
    return s;
}

答案 6 :(得分:0)

package removespace;

import java.util.Scanner;

public class RemoveSpace {

    public static void main(String[] args) {

        Scanner scan= new Scanner(System.in);

        System.out.println("Enter the string");

        String str= scan.nextLine();

        String str2=" ";

        char []arr=str.toCharArray();

        int i=0;

        while(i<=arr.length-1)
        {
            if(arr[i]==' ')
            {
                i++;
            }
            else
            {
                str2= str2+arr[i];
                i++;
            }

        }
        System.out.println(str2);

    }
}

答案 7 :(得分:-1)

此代码用于删除给定字符串中的空格和字母的重现,而不使用trim()。我们接受来自用户的字符串。我们使用charAt()将它们分隔成字符,然后我们将每个字符与null('')进行比较。如果找到null,我们跳过它并在else部分中显示该字符。为了跳过null,我们将索引i递增1。 尝试使用此代码来解决您的问题。

String name = " abc "; 
System.out.println(name);
for (int i = 0; i < name.length(); i++) {
    char ch = name.charAt(i);
    if (ch == ' ') {
        i = 2 + i - 2;
    } else {
        System.out.print(name.charAt(i));
    }
}