【问题标题】:Reading method in java with starting and ending position gone wrong开始和结束位置出错的java中的读取方法
【发布时间】:2014-06-05 05:30:34
【问题描述】:

所以基本上,我有一个考试问题,上面写着“将您的目录添加到此方法”,后续问题要求我使用此方法。拥有 Mac 的同学以及考官出于某种原因设法让文件正常工作。

public static String GetTextFromFile(int startPosition, int endPosition) {
    String gotText = "";
    String outText = "";

    try {
        Scanner fileInp = new Scanner(new File(
                "C:/Users/Ted/Desktop/diary.txt"));
        while (fileInp.hasNextLine()) {
            gotText = gotText + fileInp.nextLine();
            gotText = gotText + "\n";
        }
        // System.out.println(gotText);
        for (int i = startPosition; i <= endPosition; i = i + 1) {
            outText = outText + gotText.charAt(i - 1);
        }
        fileInp.close();
        return outText;
    } catch (IOException e) {
        return outText;
    }
}

我使用的是 Windows,为什么这对我不起作用? 这就是输入的错误所说的 起点1和终点9

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
    at java.lang.String.charAt(String.java:658)
    at java.lang.String.charAt(String.java:658)
    at secretmessages.SecretMessages.GetTextFromFile(SecretMessages.java:78)
    at secretmessages.SecretMessages.EveryNthCharacterSteganography(SecretMessages.java:199)
    at secretmessages.SecretMessages.main(SecretMessages.java:322)

【问题讨论】:

  • gotText 的值是多少?您是否尝试打印该值
  • 看来你的gotText.length &lt; endpoint
  • @Sanjeev 值为空字符串,检查异常
  • @Youngistan 我看到了。我的观点也适用。
  • @Sanjeev 我不会说你不正确。我说值是空的

标签: java windows file


【解决方案1】:

如果你没有从你的字段中得到任何文本,那么gotText 仍然是"",所以改变这一行

 for(int i = startPosition; i <= endPosition; i = i + 1)

for(int i = startPosition; i <= endPosition && gotText.length () > 0; i = i + 1)

我也宁愿使用String.substring

同时记录你的异常

catch(IOException e)
{
    e.printStackTrace ();
    return outText;
}

【讨论】:

    【解决方案2】:

    您的代码中的问题是您没有检查空字符串并使用 SrtingBuilder 而不是 String.check endPosition 值。 endPosition 值不能大于字符串的总长度。 查看以下代码可能会解决您的问题。

    StringBuilder sb=new StringBuilder(""); 而(fileInp.hasNextLine()){ sb.append(fileInp.nextLine()).append("\n");

      }
      String gotText=sb.toString();
      // System.out.println(gotText);
      for (int i = startPosition; i <= endPosition; i = i + 1) {
         outText = outText + gotText.charAt(i - 1);
     }
    
      if(!gotText.equals("")){
      if(endPosition > gotText.length())
           endPosition=gotText.length()-1;
      for (int i = startPosition; i <= endPosition; i = i + 1) {
                  outText = outText + gotText.charAt(i - 1);
              }
      }
    

    【讨论】:

    • 现有代码有什么问题。如果你先解释问题然后提出解决方案会更好
    • @Youngistan :问题是他必须检查空字符串以及 endPosition 中传递的值。
    【解决方案3】:
    outText = outText + gotText.charAt(i - 1);
    

    我认为如果一开始i==0 然后i-1 将抛出越界异常。并检查endPosition,它不应超过gotText.length()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多