gpt4 book ai didi

java - 标记包含空标记的字符串

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:04:09 24 4
gpt4 key购买 nike

我有一个看似简单的问题,即将逗号分隔的 String 拆分为标记,在以下情况下输出应包含空标记:

  • String 中的第一个字符是逗号。
  • String 中的最后一个字符是逗号。
  • 出现两个连续的逗号。

例如,对于 String:",abd,def,,ghi," 应该产生输出:{"", "abd", “def”、“”、“ghi”、“”

我已经尝试为此使用 String.splitScannerStringTokenizer,但每个都给出了不同的不需要的输出(下面的示例)。谁能为此建议一个优雅的解决方案,最好是使用 JDK 类?显然我可以自己编写一些代码,但我觉得我在提到的三种方法之一中遗漏了一些东西。请注意,分隔符是一个固定的 String,但不一定是逗号,也不是单个字符。

示例代码

import java.util.*;

public class Main12 {
public static void main(String[] args) {
String s = ",abd,def,,ghi,";
String[] tokens = s.split(",");

System.err.println("--- String.split Output ---");
System.err.println(String.format("%s -> %s", s, Arrays.asList(tokens)));

for (int i=0; i<tokens.length; ++i) {
System.err.println(String.format("tokens[%d] = %s", i, tokens[i]));
}

System.err.println("--- Scanner Output ---");

Scanner sc = new Scanner(s);
sc.useDelimiter(",");
while (sc.hasNext()) {
System.err.println(sc.next());
}

System.err.println("--- StringTokenizer Output ---");

StringTokenizer tok = new StringTokenizer(s, ",");
while (tok.hasMoreTokens()) {
System.err.println(tok.nextToken());
}
}
}

输出

$ java Main12
--- String.split Output ---
,abd,def,,ghi, -> [, abd, def, , ghi]
tokens[0] =
tokens[1] = abd
tokens[2] = def
tokens[3] =
tokens[4] = ghi
--- Scanner Output ---
abd
def

ghi
--- StringTokenizer Output ---
abd
def
ghi

最佳答案

-1 作为 limit 参数传递给 split:

String s = ",abd,def,,ghi,";
String[] tokens = s.split(",", -1);

然后您的结果数组将包含任何尾随的空字符串。

来自javadocs :

If [the limit] is non-positive then the pattern will be applied as many times as possible and the array can have any length. If [the limit] is zero then the pattern will be applied as many times as possible, the array can have any length, and trailing empty strings will be discarded.

调用 split(regex) 就像 limit 参数是 0 一样,因此丢弃尾随的空字符串。

关于java - 标记包含空标记的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12395862/

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