gpt4 book ai didi

java - 似乎无法通过换行正则表达式分割字符串

转载 作者:行者123 更新时间:2023-11-30 06:47:38 27 4
gpt4 key购买 nike

我有这个方法,它不会正确地将分割字符串添加到我的列表中。

public static List<String> formatConfigMessages(FileConfiguration config, String key, boolean colour, Object... regex) {
List<String> messages = new ArrayList<>();
if (config.isList(key)) {
config.getStringList(key).forEach(message -> {
if (message.contains("\\n")) {
Collections.addAll(messages, message.split("\\r\\n|\\n|\\r"));
} else {
messages.add(message);
}
});
} else {
String message = config.getString(key);
if (message.contains("\\n")) {
Collections.addAll(messages, message.split("\\r\\n|\\n|\\r"));
} else {
messages.add(message);
}
}
return messages.stream().map(message -> formatMessage(message, colour, regex)).collect(Collectors.toList());
}

对于一些上下文,此方法用于格式化我的 SpigotMC 的可配置消息。插入。该方法有 4 个参数:

  1. FileConfiguration - 一个用于简化 YAML 配置文件的使用的类。
  2. 字符串 - 消息的键(可以使用“.”进行索引,“.”的两侧代表 YAML 文件的不同级别)。
  3. boolean 值 - 字符串中的保留字符是否应转换为彩色字符(颜色只能由客户端看到)
  4. 对象... - 某些模式等) 将替换为数组中的以下值。

那是行不通的代码块。最初,我尝试将正则表达式设置为 \n,但没有返回列表。我认为这是因为它正在搜索已经解析的新行而不是 '\n' 字符流。所以我将正则表达式更改为\n,但这仍然不起作用。我在网上搜索并发现this post我应该使用正则表达式 \\r\\n 以及 \\n 因为 \r 在 Windows 系统上使用。这又不起作用,我不断得到 1 个字符串,其中\n 仍在里面。

最佳答案

原因如下。

Regex 有自己的转义序列,用 \\ 表示(\ 的转义序列),因为 Java 保留 \

例如,\\w表示单词中的任何字符。

要按“\n”分割,您需要 \\\\n 来代替,因为正则表达式中的 \\n 代表实际的换行符,就像\n 代表 Java 中的 1。

示例:

System.out.println(Arrays.toString("Hello\\nworld".split("\\\\n")));
System.out.println(Arrays.toString("Hello world\nwith newline".split("\\n")));
System.out.println(Arrays.toString("Hello world\nwith newline".split("\n")));
System.out.println(Arrays.toString("I won't\\nsplit".split("\\n")));

打印:

[Hello, world]
[Hello world, with newline]
[Hello world, with newline] <-- Same effect as above
[I won't\nsplit]

Additionally, to handle all three line end types (尽管 \r 本身现在并不常见),请改用正则表达式 \\\\r?\\\\n|\\\\r

关于java - 似乎无法通过换行正则表达式分割字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43413392/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com