我在从字符串中删除字符时遇到错误。我已经尝试了我在这个网站上找到的所有东西,但没有任何效果。这不是一个帮助帖子。而是一个答案,可以解释为什么会出现这种情况以及如何解决这个问题以防其他人遇到此问题。没有进一步的到期,这是我的代码:
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;
}
我收到一条错误,指出我的值超出了我输入的字符串长度的范围。请注意,这是我创建的类中的一个方法,它删除任何不是字母或空格的字符。
提前致谢
答案 0 :(得分:4)
删除字符时,Cleaner
会缩短,因此您可能会达到x
太大的位置。
我建议使用正则表达式的另一种方法:
string cleaned = TopField.getText().toLowerCase().replaceAll("[^a-z ]", "");
答案 1 :(得分:2)
我身上有很多东西。
Length
),但String
的实际长度可能减少... deleteCharAt
次调用)String
缩小的大小。例如。 x == 1
,您移除x
处的字符,将x
增加1(x == 2
),有效地跳过字符(位置2处的字符现在位于第1位< / LI>
if
声明不必要很长。事实上,根据您的需求,您可以使用Character.isDigit
或Character.isLetter
和Character.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
,因此它只允许数字值。使用类似JSpinner
,JFormattedTextField
或DocumentFilter
的内容会更好,并确保输入数据时的正确性...恕我直言
答案 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()的函数。