java中的读取方法,起始位置和结束位置出错

时间:2014-06-05 05:30:34

标签: java windows file

所以基本上,我有一个考试问题说"将你的目录添加到这个方法"后续问题要求我使用这种方法。我的同学拥有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)

3 个答案:

答案 0 :(得分:0)

如果您未收到任何文字,那么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;
}

答案 1 :(得分:0)

  

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

     

StringBuilder sb = new StringBuilder(&#34;&#34;);   while(fileInp.hasNextLine()){            。sb.append(fileInp.nextLine())附加(&#34; \ n&#34);

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

答案 2 :(得分:0)

outText = outText + gotText.charAt(i - 1);

我想在这里,如果在开头i==0,那么i-1将抛出超出范围的异常。并检查endPosition它不应超出gotText.length()