删除字符串-Java中的字符

时间:2013-04-05 02:42:11

标签: java string char

我在从字符串中删除字符时遇到错误。我已经尝试了我在这个网站上找到的所有东西,但没有任何效果。这不是一个帮助帖子。而是一个答案,可以解释为什么会出现这种情况以及如何解决这个问题以防其他人遇到此问题。没有进一步的到期,这是我的代码:

public JTextField Clean()
{
    String Cleaner = TopField.getText();
    Cleaner=Cleaner.toLowerCase();
    int Length = Cleaner.length();
    StringBuilder Combiner = new StringBuilder(Cleaner);
    for (int x=0;x+1<Length;x++)
    {
       char c = Cleaner.charAt(x);
       char c1 = Cleaner.charAt(x+1);
       if(c==' ' && c1==' ')
        {
            Combiner.deleteCharAt(x);
            Cleaner=Combiner.toString();
        }
       if(c!='a' && c=='b' && c!='c' && c!='d' && c!='f' && c!='g' && c!='h' && c!='i' && c!='j' && c!='k' && c!='l' && c!='m' && c!='n' && c!='o' && c!='p' && c!='q' && c!='r' && c!='s' && c!='t' && c!='u' && c!='v' && c!='w' && c!='x' && c!='y' && c!='z' && c!=' ')
        {Combiner.deleteCharAt(x);
         Cleaner=Combiner.toString();}
       }     

      TopField.setText(Cleaner); 
      return TopField;               
}

我收到一条错误,指出我的值超出了我输入的字符串长度的范围。请注意,这是我创建的类中的一个方法,它删除任何不是字母或空格的字符。

提前致谢

3 个答案:

答案 0 :(得分:4)

删除字符时,Cleaner会缩短,因此您可能会达到x太大的位置。

我建议使用正则表达式的另一种方法:

string cleaned = TopField.getText().toLowerCase().replaceAll("[^a-z ]", "");

答案 1 :(得分:2)

我身上有很多东西。

  • 您的循环基于固定值(Length),但String的实际长度可能减少...
  • 您可能会在每个循环中删除2个字符(有两个deleteCharAt次调用)
  • 循环没有考虑String缩小的大小。例如。 x == 1,您移除x处的字符,将x增加1(x == 2),有效地跳过字符(位置2处的字符现在位于第1位< / LI>
  • 您的if声明不必要很长。事实上,根据您的需求,您可以使用Character.isDigitCharacter.isLetterCharacter.isWhiteSpace

String Cleaner = TopField.getText();
Cleaner = Cleaner.toLowerCase();
StringBuilder Combiner = new StringBuilder(Cleaner);
int x =0;
while (x < Combiner.length()) {
    char c = Combiner.charAt(x);
    if (c >= 'a' && c <= 'z' || c == ' ') {
        Combiner.deleteCharAt(x);
    } else {
        x++;
    }
}

从代码的外观来看,您似乎想要过滤JTextField,因此它只允许数字值。使用类似JSpinnerJFormattedTextFieldDocumentFilter的内容会更好,并确保输入数据时的正确性...恕我直言

答案 2 :(得分:0)

我使用了isDigit()函数,发现输出不正确。看看我测试的代码,发现输出问题。任何一个解释。

public static void main(String[] args) {
    // TODO Auto-generated method stub
    String temp="you got 211111 out of 211111?";
    StringBuilder cleaner=new StringBuilder(temp);
    for(int i=0;i<cleaner.length();i++)
    {
        char c=cleaner.charAt(i);
        if(Character.isDigit(c))
        {
            cleaner.deleteCharAt(i);
        }
    }
    System.out.println(cleaner);

我得到的输出为:你的111中有111个?

它不会删除一些数字。

还发现Java中没有名为replaceAll()的函数。