Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 公共字符串-无法解析_Java_Arrays_String_Try Catch_Public - Fatal编程技术网

Java 公共字符串-无法解析

Java 公共字符串-无法解析,java,arrays,string,try-catch,public,Java,Arrays,String,Try Catch,Public,错误于 bw.write(dataString); 我如何解决这个问题? 无法将数据字符串解析为变量 public class test { public static void main(String[] args){ ArrayList<String> data = new ArrayList<String>(); try (BufferedReader br = new BufferedReader

错误于

bw.write(dataString);
我如何解决这个问题?
无法将数据字符串解析为变量

public class test {
        public static void main(String[] args){
            ArrayList<String> data = new ArrayList<String>();

            try (BufferedReader br = new BufferedReader(new FileReader("src/test.txt"))) {
            String CurrLine;

            while((CurrLine = br.readLine()) != null) {
                data.add(CurrLine);
            }
            String[] dataArray = new String[data.size()];
            String dataString = Arrays.toString(dataArray);

            String[] client = dataString.split("<::>");
            Integer nameId = Arrays.binarySearch(client, "Test");
            Integer versId = nameId + 1;
            System.out.println(client[nameId] + "\n" + client[versId]);


        } catch(FileNotFoundException ex) {
        System.out.println("FNFE");
        } catch(IOException ex) {
            System.out.println("IOE");
        }
            try{
                File file = new File("src/test.txt");
                if (!file.exists()) {
                file.createNewFile();
                }
                FileWriter fw = new FileWriter(file);
                BufferedWriter bw = new BufferedWriter(fw);
        bw.write(dataString);
                bw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
    }
公共类测试{
公共静态void main(字符串[]args){
ArrayList数据=新的ArrayList();
try(BufferedReader br=newbufferedreader(newfilereader(“src/test.txt”)){
弦线;
而((CurrLine=br.readLine())!=null){
添加数据(CurrLine);
}
String[]dataArray=新字符串[data.size()];
字符串dataString=Arrays.toString(dataArray);
String[]client=dataString.split(“”);
整数nameId=Arrays.binarySearch(客户端,“测试”);
整数versId=nameId+1;
System.out.println(客户端[nameId]+“\n”+客户端[versId]);
}捕获(FileNotFoundException ex){
系统输出打印LN(“FNFE”);
}捕获(IOEX异常){
系统输出打印项次(“IOE”);
}
试一试{
File File=新文件(“src/test.txt”);
如果(!file.exists()){
createNewFile();
}
FileWriter fw=新的FileWriter(文件);
BufferedWriter bw=新的BufferedWriter(fw);
write(数据字符串);
bw.close();
}捕获(IOE异常){
e、 printStackTrace();
}
}

在try-and-catch块外部声明
dataString
仅此而已。;)如果在循环内部或在本例中是在try-catch块中声明,则其生命周期仅限于此

像这样:

String dataString = null;
在try-catch块中:

dataString = Arrays.toString(dataArray);

dataString
超出了try块的范围

也许可以在类的顶部添加dataString作为实例变量

public class test {
        private String dataString = null;
        public static void main(String[] args){
            ArrayList<String> data = new ArrayList<String>();

            try (BufferedReader br = new BufferedReader(new FileReader("src/test.txt"))) {
            String CurrLine;

            while((CurrLine = br.readLine()) != null) {
                data.add(CurrLine);
            }
            String[] dataArray = new String[data.size()];
            dataString = Arrays.toString(dataArray);
         ...
公共类测试{
私有字符串dataString=null;
公共静态void main(字符串[]args){
ArrayList数据=新的ArrayList();
try(BufferedReader br=newbufferedreader(newfilereader(“src/test.txt”)){
弦线;
而((CurrLine=br.readLine())!=null){
添加数据(CurrLine);
}
String[]dataArray=新字符串[data.size()];
dataString=Arrays.toString(dataArray);
...

dataString变量的作用域仅限于第一个try-catch块。按如下所示更改其声明:

public static void main(String[] args){
    ArrayList<String> data = new ArrayList<String>();
    String dataString = null;

    try (BufferedReader br = new BufferedReader(new FileReader("src/test.txt"))) {
        String CurrLine;

        while((CurrLine = br.readLine()) != null) {
            data.add(CurrLine);
        }
        String[] dataArray = new String[data.size()];
        dataString = Arrays.toString(dataArray);

        String[] client = dataString.split("<::>");
        Integer nameId = Arrays.binarySearch(client, "Test");
        Integer versId = nameId + 1;
        System.out.println(client[nameId] + "\n" + client[versId]);


    } catch(FileNotFoundException ex) {
        System.out.println("FNFE");
    } catch(IOException ex) {
        System.out.println("IOE");
    }
    try{
        File file = new File("src/test.txt");
        if (!file.exists()) {
            file.createNewFile();
        }
        FileWriter fw = new FileWriter(file);
        BufferedWriter bw = new BufferedWriter(fw);
        bw.write(dataString);
        bw.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
publicstaticvoidmain(字符串[]args){
ArrayList数据=新的ArrayList();
字符串dataString=null;
try(BufferedReader br=newbufferedreader(newfilereader(“src/test.txt”)){
弦线;
而((CurrLine=br.readLine())!=null){
添加数据(CurrLine);
}
String[]dataArray=新字符串[data.size()];
dataString=Arrays.toString(dataArray);
String[]client=dataString.split(“”);
整数nameId=Arrays.binarySearch(客户端,“测试”);
整数versId=nameId+1;
System.out.println(客户端[nameId]+“\n”+客户端[versId]);
}捕获(FileNotFoundException ex){
系统输出打印LN(“FNFE”);
}捕获(IOEX异常){
系统输出打印项次(“IOE”);
}
试一试{
File File=新文件(“src/test.txt”);
如果(!file.exists()){
createNewFile();
}
FileWriter fw=新的FileWriter(文件);
BufferedWriter bw=新的BufferedWriter(fw);
write(数据字符串);
bw.close();
}捕获(IOE异常){
e、 printStackTrace();
}
}

您需要了解变量的作用域。
dataString
的作用域仅限于
try-catch
块。如何从dataString获取数据?用一个示例编辑了我的答案。第一行代码必须在try-catch块之外我得到错误:线程“main”中出现异常java.lang.ArrayIndexOutOfBoundsException:-1在test.main(test.java:33)我打赌它在这一行:
System.out.println(client[nameId]+“\n”+client[versId]);
。只需调试并查找出错的地方。我得到错误:线程“main”java.lang.ArrayIndexOutOfBoundsException:-1在test.main(test.java:33)我得到错误:线程“main”java.lang.ArrayIndexOutOfBoundsException中的异常:-1位于test.main(test.java:33)您可能正在搜索数组中不存在的元素。当没有与给定项相等的项时,搜索返回-1。此外,根据javadoc,在调用二进制搜索之前,必须对数组进行排序。否则,您必须进行线性搜索以查找索引。我的数组中有此元素。如果我初始化数据字符串如果我在try-catch-all中删除写入和初始化数据字符串的代码,则会出现此错误。很抱歉我的英语不好。数组是否已排序?调试并检查
Integer-nameId=Arrays.binarySearch(client,“Test”);
行,并确保元素在数组中且数组已排序。