字符串没有正确填充

时间:2013-11-15 19:32:57

标签: java

我正在编写一个程序,它将从文件中读取一个字符串,然后删除任何不是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”。

1 个答案:

答案 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}}