【问题标题】:Getting java.lang.StringIndexOutOfBoundsException : String index out of range: (not able to figure it out)获取 java.lang.StringIndexOutOfBoundsException :字符串索引超出范围:(无法弄清楚)
【发布时间】:2011-08-13 19:52:14
【问题描述】:

我有一段代码-

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

import org.eclipse.core.runtime.Platform;

public class RAF {

    public static void main(String[] args) {

          File file = new File("test.txt");
          Scanner scanner;
        try {
            scanner = new Scanner(file).useDelimiter("\n");
            String line = scanner.next();
              String newLine = line.substring(0, 252) + "<input type=\"button\" value = \"abhishek\" />" + line.substring(252);
              FileWriter writer = new FileWriter(file);
              writer.write(newLine);
              writer.close();

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

test.txt 文件是 -

> <!DOCTYPE html PUBLIC "-//W3C//DTD
> HTML 4.01 Transitional//EN"
> "http://www.w3.org/TR/html4/loose.dtd">
> <html> <head> <meta
> http-equiv="Content-Type"
> content="text/html;
> charset=ISO-8859-1"> <title>Insert
> title here</title> </head> <body>
> 
> <form><input></form> </body> </html>

test.txt 的总长度是 285,我想在 252 位置添加内容,这样输出将是 -

> "http://www.w3.org/TR/html4/loose.dtd">
> <html> <head> <meta
> http-equiv="Content-Type"
> content="text/html;
> charset=ISO-8859-1"> <title>Insert
> title here</title> </head> <body>
> 
> <form>**<input type="button" value =
> "abhishek"/>**<input></form> </body>
> </html>

但我得到了例外 - 线程“主”java.lang.StringIndexOutOfBoundsException 中的异常:字符串索引超出范围:252 在 java.lang.String.substring(未知来源) 在 com.lg.palette.elementEditFactory.RAF.main(RAF.java:25)

代码有什么问题 我的主要目标是获取第二个 test.txt 中显示的内容

【问题讨论】:

    标签: java inputstream java.util.scanner


    【解决方案1】:

    您只是在阅读文件的第一行...不是 252 个字符长。看来您确实想读入整个文件然后对其进行修改。

    GuavaFiles 中有一些有用的方法可以一次性读取整个文件。

    (不过,总的来说,这感觉是一种非常脆弱的方法……您对分割点始终是 HTML 中的 252 个字符有多大信心?)

    【讨论】:

    • 252 只是我提到的一个随机点,实际上我正在使用一种算法来获取需要放置代码的那个点。它只是我的问题的一个示例...... Guava 是唯一的方法吗,我不能使用 RandomAccessFile.. 我试过但我认为我在 Random 上犯了一些错误......
    • @Abhishek:你可以用任何你喜欢的方式阅读整个文件——番石榴让它变得简单。我不认为你真的想要 RandomAccessFile,如果你想读取整个文件......你可以只使用 FileInputStream 和 InputStreamReader。
    • 我想读取文件,并且在特定的点上我想写我的内容。当我尝试时,有时我会丢失其他内容,所以无法弄清楚。我的实际目的地是将内容写入文件的中间(随机点)
    • @Abhishek:是的,你不能只写在文件中间,否则你会覆盖其他数据。一种选择是将前 n 个字节复制到一个新文件中,然后写入新数据,然后复制原始文件的其余部分。请注意,字节数不一定与字符数相同...
    猜你喜欢
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    • 2016-02-25
    • 2018-11-14
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    相关资源
    最近更新 更多