0

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

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;               
}

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

提前致谢

4

3 回答 3

4

当您删除字符时,Cleaner它会变得更短,因此您可能会达到一个x太大的点。

我会建议使用正则表达式的不同方法:

string cleaned = TopField.getText().toLowerCase().replaceAll("[^a-z ]", "");
于 2013-04-05T02:44:42.710 回答
2

有很多事情突然出现在我身上。

  • 您将循环基于固定值(Length),但是实际长度String可以减少...
  • 您可能会在每个循环中删除 2 个字符(有两个deleteCharAt调用)
  • 循环没有考虑String. 例如。x == 1,删除 处的字符x,增加x1 ( x == 2),有效地跳过一个字符(位置 2 的字符现在位于位置 1
  • 你的if陈述不必要地冗长。实际上,根据您的需要,您可以使用Character.isDigitorCharacter.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++;
    }
}

从您的代码的外观来看,您似乎想要过滤 aJTextField所以它只允许数值。最好使用类似 a 的东西JSpinnerJFormattedTextField或者DocumentFilter确保输入数据的正确性......恕我直言

于 2013-04-05T02:54:44.910 回答
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()的函数。

于 2013-05-04T12:57:33.567 回答