我正在编写一个程序,它将从文件中读取一个字符串,然后删除任何不是1-9或A-Z或a-z的字符串。 A-Z值需要变为小写。一切似乎运行良好,我没有错误,但我的输出搞砸了。似乎无缘无故地跳过某些角色。我看了它并调整了它但没有任何效果。无法弄清楚为什么它会随机跳过某些字符,因为我相信我的if语句是正确的。这是代码:
String dataIn;
int temp;
String newstring= "";
BufferedReader file = new BufferedReader(new FileReader("palDataIn.txt"));
while((dataIn=file.readLine())!=null)
{
newstring="";
for(int i=0;i<dataIn.length();i++)
{
temp=(int)dataIn.charAt(i);
if(temp>46&&temp<58)
{
newstring=newstring+dataIn.charAt(i);
}
if(temp>96&&temp<123)
{
newstring=newstring+dataIn.charAt(i);
}
if(temp>64&&temp<91)
{
newstring=newstring+Character.toLowerCase(dataIn.charAt(i));
}
i++;
}
System.out.println(newstring);
}
所以举个例子,我读到的第一个字符串是:
A sample line this is.
程序运行后的输出是:
asmlietis
所以它正在读取A使其小写,跳过它想象的空间,读取s in,但由于某种原因跳过“a”和“m”并转到“p”。
答案 0 :(得分:4)
你在每个块中递增i
以及,就像在主循环“header”中一样。实际上,因为您在i++;
语句的else
语句中有一个if
,所以在循环期间有时会增加i
两次。
除了i++;
语句声明中的for
语句以外的所有newstring="";
for(int i=0;i<dataIn.length();i++)
{
temp=(int)dataIn.charAt(i);
if(temp>46&&temp<58)
{
newstring=newstring+dataIn.charAt(i);
}
if(temp>96&&temp<123)
{
newstring=newstring+dataIn.charAt(i);
}
if(temp>64&&temp<91)
{
newstring=newstring+Character.toLowerCase(dataIn.charAt(i));
}
}
语句。例如:
char
我不会停止在那里编辑。我也是:
int
代替StringBuilder
作为您正在查看的当前角色的本地变量if
构建字符串else if
/ toLower
表明您只希望进入一个分支String line;
while((line = file.readLine()) != null)
{
StringBuilder builder = new StringBuilder(line.length());
for (int i = 0; i < line.length(); i++) {
char current = line.charAt(i);
// Are you sure you want to trim 0?
if ((current >= '1' && current <= '9') ||
(current >= 'a' && current <= 'z')) {
builder.append(current);
} else if (current >= 'A' && current <= 'Z') {
builder.append(Character.toLowerCase(current, Locale.US));
}
}
System.out.println(builder);
}
中指定区域设置以避免“土耳其问题”与我所以:
{{1}}