【问题标题】:java string delimiter, keeping delimiter in tokenjava字符串分隔符,将分隔符保留在令牌中
【发布时间】:2012-05-12 15:07:54
【问题描述】:

我试图拆分一个字符串,但将分隔符保留在下一个标记的开头(如果可能的话)

示例:我正在尝试将字符串 F120LF120L 拆分为

F120
L
F120
L

我试过了

StringTokenizer st = new StringTokenizer(str, "F,L");

但这只是返回

120
120

【问题讨论】:

  • 你想只用 'F' 和 'L' 分割,还是也用 ',' 分割?

标签: java string delimiter


【解决方案1】:

docs,您可以使用StringTokenizer st = new StringTokenizer(str, "L", true); 最后一个参数是一个布尔值,指定也必须返回分隔符。

【讨论】:

  • 这样,F 单独返回.. 不是 F120!对于他的示例,以下内容将起作用: StringTokenizer st = new StringTokenizer(str, "L", true);
  • 啊,是的。应该更仔细地阅读。 :(我会更新答案,谢谢!
  • 感谢大家的快速解答 :-)
  • 顺便说一句,请注意 OP,如果您是按令牌拆分,则也不需要最后一个参数。也就是说,您只是使用“L”作为标记,而不是“F”
  • 是的,我将使用“F”作为标记,有时“L”之后也会有一些数字,但谢谢,我现在走在正确的轨道上,我自己解决了剩下的问题(我希望) :-)
【解决方案2】:

使用split(),用于所有实际目的StringTokenizerdeprecated(它仍然存在只是为了向后兼容)。这将起作用:

String delimiter = "L";
String str = "F120LF120L";
String[] splitted = str.split(delimiter);

for (String s : splitted) {
    System.out.println(s);
    System.out.println(delimiter);
}

> F120
> L
> F120
> L

【讨论】:

  • str.split(delimiter); 它返回F120 的数组,没有L
【解决方案3】:

暴力破解怎么样?

String del = "L";
String str = "F120LLF120LLLLF12L";
int i = 0;

while (true) {
    i = str.indexOf(del, i);
    if (i == -1) break;
    String a = str.substring(0, i);
    String b = str.substring(i + del.length());
    str = a + " " + del;
    str += b.startsWith(del) || b.length() == 0 ? b : " " + b;
    i = a.length() + del.length() + 1;
}

System.out.println(str);
// Will print: F120 L L F120 L L L L F12 L

【讨论】:

  • 您当然必须将空格字符串(“”)替换为换行字符串(“\n”)
猜你喜欢
  • 1970-01-01
  • 2019-10-11
  • 1970-01-01
  • 2013-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-24
  • 1970-01-01
相关资源
最近更新 更多