java - 我们可以向后拆分 Java 字符串吗?

标签 java string

我有一个字符串

Product Description ID1 ID2 QTY Rate1 Rate2

我想把它打破

Product Description|ID1|ID2|QTY|Rate1|Rate2

我能看到的唯一常见分隔符是空格。但产品描述可以是任意数量的单词。所以我不知道它会有多少空间。但字符串其余部分的空格是固定的。

目前我将其拆分为数组,获取其长度并适当连接。有没有更直接的方法?

最佳答案

尚不完全清楚您所说的“更直接”是什么意思,但我假设您想避免连接步骤。

一种方法如下:

  1. 使用 Matcher.find(int) 进行初始传递以查找“N - 5th”分隔符的位置。 (这需要一个包含 5 个元素的 int[],您可以将其用作使用 find 确定的偏移量的队列。)

  2. 使用String.substring提取分隔符前后的字符串

  3. 使用String.split分割第二个子字符串以分隔最后5个字段。

如果保留偏移量和匹配长度(从步骤 #1 开始),您可以将步骤 #3 中的 split 调用替换为循环和 substring 调用。

<小时/>

(一般不能“向后”拆分的原因是正则表达式无法向后匹配。或者更准确地说,如果您这样做,您最终可能会与“向前”进行拆分时不同。这使得避免执行 2 次传递是很重要的。显然,在您的具体情况下,分隔符正则表达式将是“一个或多个空白”,这将在两个方向上工作......如果 Matcher API 中有能力做到这一点.).

关于java - 我们可以向后拆分 Java 字符串吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26260136/

相关文章:

java - Android ACTION_WEB_SEARCH

java - 是否有比使用 if-else 语句(或 switch)更面向对象的方法来选择基于字符串的类?

java - Groovy:与 Java 相比,多线程性能差,计算速度慢?

c++ - 坚持从文本文件中删除 "\r"! C++

java - moquette 用户的权限与访问控制列表中写入的权限不同

java - Junit 预运行调用

Swift 4 contains 方法对于像 "as"这样的短单词并不起作用

c++ - 如何在 C++ 的正则表达式中使用变量?

c++ - 将字符串格式化为科学记数法

python - 为什么 list.reverse 不返回列表?