【问题标题】:How to split String without regex [duplicate]如何在没有正则表达式的情况下拆分字符串 [重复]
【发布时间】:2016-08-19 11:36:53
【问题描述】:

在我的 Java 应用程序中,我需要在两种情况下都使用 same “目标”来查找索引和拆分字符串。目标只是一个点。

查找索引(通过 indexOf 和 lastIndexOf)不使用正则表达式,所以

String target = ".";
String someString = "123.456";
int index = someString.indexOf(target); // index == 3

给我我需要的索引。

不过,我也想用这个“目标”来分割一些字符串。但是现在目标字符串被解释为正则表达式字符串。所以我想拆分字符串的时候不能使用和以前一样的目标字符串...

String target = ".";
String someString = "123.456";
String[] someStringSplit = someString.split(target); // someStringSplit is an empty array

所以我需要以下任一:

  1. 一种通过非正则表达式目标拆分为数组的方法
  2. 一种将非正则表达式目标字符串“转换”为正则表达式字符串的方法

有人可以帮忙吗?您是否同意标准 Java 平台使用正则表达式进行“拆分”而不使用正则表达式进行“indexOf”似乎有点奇怪?

【问题讨论】:

  • 为什么不能简单地在拆分正则表达式中转义小数点?
  • 您可以将 substring 方法与您的 indexOf 一起使用,并提取令牌之前的字符串和之后的字符串。也就是说,如果你真的想避免使用split
  • @cricket_007:如果我理解正确,你建议我使用target = "\\."。那我就不行了someString.indexOf(target);
  • @AntonH:恐怕我需要一个比这更通用的解决方案......
  • @Birger 如果您想要更通用的解决方案,则必须提供更高的精度。 indexOf 是一个字符还是多个?还是带有特殊字符?你确定只有一个分隔符,或者可能有几个吗?你试图做的不是重新发明正则表达式是什么?

标签: java regex string split


【解决方案1】:

您需要转义“目标”才能将其用作正则表达式。 试试

String[] someStringSplit = someString.split(Pattern.quote(target));

如果有帮助,请告诉我。

【讨论】:

  • 太完美了。现在我可以将target 用于indexOfsplit。谢谢!
【解决方案2】:

你可以试试这个。

String target = ".";
String someString = "123.456";
StringTokenizer tokenValue = new StringTokenizer(someString, target);

while (tokenValue.hasMoreTokens()) {
    System.out.println(tokenValue.nextToken());
}

【讨论】:

  • 谢谢,但我更喜欢将目标字符串包装成正则表达式。
【解决方案3】:

String::split 如果正则表达式为,则不使用正则表达式进行拆分:

  • 单字符字符串,并且该字符不是正则表达式的元字符之一.$|()[{^?*+\\
  • 双字符字符串,第一个字符是反斜杠,第二个是 不是 ascii 数字或 ascii 字母。

详情请查看String::split()源代码。

对于转义的 '.'目标将被拆分没有正则表达式。

【讨论】:

  • 你并没有真正阅读这个问题。我在问如何在indexOfsplit 中使用相同的字符串。
猜你喜欢
  • 2023-03-10
  • 1970-01-01
  • 2020-12-21
  • 2018-06-02
  • 1970-01-01
  • 2013-05-26
  • 2017-10-29
  • 1970-01-01
  • 2016-02-05
相关资源
最近更新 更多