在java中将行的每个元素放入数组
我有一个txt文件,需要将行中的每个元素(字符串、空格)放入一个数组 例如: 1行“嘿,1天\n” 2///等 第一行的输出:[“H”“e”“y”“1”“d”“a”“y”] 这样做的哪种方式是最理想的?使用split和string,或者对char类型进行操作 为什么不直接调用字符串呢 如果您仍然使用在java中将行的每个元素放入数组,java,arrays,string,split,Java,Arrays,String,Split,我有一个txt文件,需要将行中的每个元素(字符串、空格)放入一个数组 例如: 1行“嘿,1天\n” 2///等 第一行的输出:[“H”“e”“y”“1”“d”“a”“y”] 这样做的哪种方式是最理想的?使用split和string,或者对char类型进行操作 为什么不直接调用字符串呢 如果您仍然使用nextLine,读卡器将截断换行符 比如: try(BufferedReader r = new BufferedReader(new FileReader("topSecretDocs.txt")
nextLine
,读卡器将截断换行符
比如:
try(BufferedReader r = new BufferedReader(new FileReader("topSecretDocs.txt"))) {
for(String line = r.readLine(); line != null; line = r.readLine()) {
char[] chars = line.toCharArray();
System.out.println("Split line to " + Arrays.toString(chars));
}
} catch(IOException e) {
dealWithException();
}
编辑:请注意,您可能希望使用循环遍历字符串,因为不需要复制字符数组,特别是对于非常大的字符串
编辑2:这里有一个非常糟糕的基准
static long time(Runnable r) {
long start = System.nanoTime();
r.run();
return System.nanoTime() - start;
}
static int cs = 0;
public static void main(String[] args) {
char[] bigString = new char[100000];
Arrays.fill(bigString, 0, bigString.length / 4, 'A');
Arrays.fill(bigString, bigString.length / 4, bigString.length / 2, 'B');
Arrays.fill(bigString, bigString.length / 2, bigString.length * 3 / 4, 'C');
Arrays.fill(bigString, bigString.length * 3 / 4, bigString.length, 'D');
String s = new String(bigString);
float avgCopy = 0, avgLoop = 0;
final int times = 100000;
for(int i = 0; i < times; i++) {
avgLoop += time(() -> {
cs = 0;
for(int j = 0; j < s.length(); j++)
cs += s.charAt(j) == 'C' ? 1 : 0;
});
} avgLoop /= times;
for(int i = 0; i < times; i++) {
avgCopy += time(() -> {
char[] chars = s.toCharArray();
cs = 0;
for(char c : chars)
cs += c == 'C' ? 1 : 0;
});
} avgCopy /= times;
System.out.println("copy: " + avgCopy + " ns");
System.out.println("loop: " + avgLoop + " ns");
System.out.println("There were (obviously) " + cs + " Cs in that string.");
}
所以,大约一半的速度。你是否愿意称之为一个显著的差异,我将留给你。你不能只使用
string。ToCharray
你的意思是将整行放入一个字符串,然后使用这种方法?读取文件有问题吗?或者获取字符串的字符?
copy: 70984.336 ns
loop: 40534.63 ns