如何在Java中使用System.lineseparator和逗号分割字符串?

3qpi33ja  于 2023-06-28  发布在  Java
关注(0)|答案(4)|浏览(98)

整数用逗号分隔,行用System.lineseparator()分隔。
通过使用readFile方法将TextFile转换为字符串。现在我想将该字符串转换为整数值的字符串的1D数组。
然而,当我用逗号(“,”)分隔字符串时,我会松开行末尾的值,因为它们不是用逗号分隔的,而是用行分隔符分隔的。我该如何解决这个问题?
我试图只用逗号分隔它,因为我认为行分隔器会自动读取分割。然而,事实并非如此。Java不允许将一个字符串拆分两次。

m3eecexj

m3eecexj1#

使用\R匹配(任何)系统行分隔符:

String[] values = str.split("\\R|,");

参见live demo
注意:\R不能在字符类中工作。
如果你想要数组或int的值:

int[] ints = Arrays.stream(str.split("\\R|,"))
  .mapToInt(Integer::parseInt)
  .toArray();
7eumitmz

7eumitmz2#

@Bohemian的变体,使用来自文件的Scanner

import java.nio.file.*;
import java.util.*;

public class Nums {
    public static void main(String[] args) {
        try (Scanner s = new Scanner(Files.newBufferedReader(Path.of("numbers.txt")))) {
                s.useDelimiter("[,\r\n]");
                String[] numbers = s.tokens().
                map(String::trim).
                toArray(String[]::new);
            System.out.println(Arrays.toString(numbers));
        }
        catch(Throwable t) {
            t.printStackTrace();
        }
    }
}
7cwmlq89

7cwmlq893#

假设您想将它们用作ints,您可以在白色上分割,同时也可以在逗号和行分隔符上分割。

String s = """
18, 25,39, 40, 10, 26, 21, 29, 6, 24, 11, 10, 7, 12, 20, 21, 28, 7
13,17,32,23,17,18,19, 9, 15,27, 24, 35, 16, 21, 6, 15, 25, 2
11,12,13, 32, 26, 7,23, 19, 30, 16, 17, 10, 24, 18, 21, 22, 26, 25
13, 24,14, 26,7, 5,25, 12, 15, 16, 17, 18, 19, 22, 1, 13, 14, 18
28, 34, 35, 20, 3, 8,31, 32, 14, 33, 10, 4, 5, 23, 11, 20, 0, 12
33,34, 15,8, 29, 30, 31,22, 27,32,9,6,0,1,2,3, 4,11
14,33,34,9,3,28,4,5,6,27,35,0,1,30,8,29,2, 31
29,9,2,8,3,4,5,33,30,31, 11, 13,24, 35,0,27,22,1
""";

String[] stringArray = s.split("\\R|[\\s,]+");       
int count = 1;
for (String str : stringArray) {
    System.out.print(str + " " );
    if (count % 20 == 0) {
        System.out.println();
    }
    count++;
}

每行打印不超过20个,以避免水平滚动。

18 25 39 40 10 26 21 29 6 24 11 10 7 12 20 21 28 7 13 17 
32 23 17 18 19 9 15 27 24 35 16 21 6 15 25 2 11 12 13 32 
26 7 23 19 30 16 17 10 24 18 21 22 26 25 13 24 14 26 7 5 
25 12 15 16 17 18 19 22 1 13 14 18 28 34 35 20 3 8 31 32 
14 33 10 4 5 23 11 20 0 12 33 34 15 8 29 30 31 22 27 32 
9 6 0 1 2 3 4 11 14 33 34 9 3 28 4 5 6 27 35 0 
1 30 8 29 2 31 29 9 2 8 3 4 5 33 30 31 11 13 24 35 
0 27 22 1

如果你想把它们转换成一个int数组,就像这样做。注意,您需要消除白色以避免NumberFormatException

int[] intArray = Arrays.stream(s.split("\\R|[\\s,]+"))
                .mapToInt(Integer::parseInt).toArray();
vcirk6k6

vcirk6k64#

您可以使用 String#replaceAll 方法首先删除行分隔符。
下面的模式应该足以删除 * 新行分隔符 *。

(?:\r\n?|\n)+

这里有一个例子。

String string = "1,2,3" + System.lineSeparator() + "4,5,6";
String[] strings = string.replaceAll("(?:\\r\\n?|\\n)+", ",").split(",");
System.out.println(Arrays.toString(strings));

输出量

[1, 2, 3, 4, 5, 6]

相关问题