输入看起来像
a b c d 4
e f g h 2
其中每一行都会像列表一样读取,整数表示为列表中的索引
我首先尝试读取文件行be line并将其存储在列表中。继承人我有什么
public class FileReader {
public static void main(String[] args) {
String line = null;
List<String> list = new ArrayList<String>();
try {
FileInputStream fstream = new FileInputStream("test.txt");
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
// File file = new File("test.txt");
// Scanner scanner = new Scanner(file);
while ((line = br.readLine()) != null) {
list.add(line);
}
System.out.println(list);
} catch (Exception e) {
e.printStackTrace();
}
}
}
现在我想从列表中删除空格并将值存储在char数组中然后我计划向后遍历该数组直到第n个元素,具体取决于n的输入。
String[] elements = line.trim().split("\\s");
char[] chars = new char[elements.length - 1];
int i= Integer.parseInt(elements[elements.length - 1]);
for (i = 0; i < elements.length - 1; i++)
char[i] = elements[i].charAt(i);
之前有人向我提供了这段代码,我尝试了它,它在String []元素上抛出了一个nullpointerexception。
答案 0 :(得分:2)
这是因为你在这里运行直到行为空
while((line = br.readLine()) != null)
{
list.add(line);
}
然后你试图打电话给.trim()
。
您的意思是在list
中处理字符串吗?
如果是这样尝试循环遍历您的列表,您已经正确地拆分它并获取最后一个元素。你需要做的就是计算偏移量,在这种情况下,它将是长度 - 1 - 最后一个元素,在你的String []元素中你可以打印出来。
for (int i = 0; i < list.size(); i++)
{
String currentLine = list.get(i);
String[] elements = currentLine.trim().split("\\s");
int lastElement = Integer.parseInt(elements[elements.length - 1]);
String desiredValue = elements[elements.length - 1 - lastElement];
System.out.println("desiredValue = " + desiredValue);
}
答案 1 :(得分:0)
你可以避免你正在做的大部分工作。我不知道你的输入是否需要很大的灵活性(如有必要,还需要代码),但在你的例子中,你只有1位数的索引。
完全避免所有遍历和循环:
String currentLine = file.nextLine();
//Find value from last space in the string, until the end of the string (will be the number)
int index = Integer.parseInt(currentLine.substring(
currentLine.lastIndexOf(' ') + 1, currentLine.length()));
//Remove all spaces from the current line
currentLine = currentLine.replaceAll("\\s+","");
//Remove the index at the end from the string, leaving only the characters
currentLine = currentLine.substring(0, currentLine.indexOf(index + ""));
char desiredValue = currentLine.charAt(currentLine.length() - index);
System.out.println("desiredValue = " + desiredValue);
如果以后都不需要这样做,这可以节省大量的数据添加内容,只需要第一次完成。