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”);
行,并确保元素在数组中且数组已排序。