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

时间:2014-10-08 14:59:28

标签: java string

我有一个字符串

Product Description ID1 ID2 QTY Rate1 Rate2

我想把它打破

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

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

目前我将它拆分为数组,得到它的长度并适当地连接。有更直接的方式吗?

5 个答案:

答案 0 :(得分:2)

正常将其拆分为数组 最终将得到一个包含n + 5个组件的数组,其中n是产品说明中的单词数。

然后你知道:

Rate2 = arr[len-1]
Rate1 = arr[len-2]
QTY = arr[len-3]
ID2 = arr[len-4]
ID3 = arr[len-5]

然后将元素arr [0]与arr [len-6]组合在一起,在它们之间添加一个空格。这将为您提供产品说明。

或者你可以在输出数组上使用Collections.reverse(),但两种方法都得到相同的结果

答案 1 :(得分:2)

您的意思并不完全清楚"更直接",但我假设您要避免连接步骤。

一种方法如下:

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

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

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

  4. 如果您保留偏移量和匹配长度(从第1步开始),您可以使用循环和split来代替步骤3中的substring来电。


    (你通常不会分裂"向后"是因为正则表达式无法向后匹配。或者更确切地说,如果你这样做,你最终可能会以不同的方式分裂到你做的时候"前进"。这使得避免做2次传递变得非常重要。显然,在你的特定情况下,分隔符正则表达式将是"一个或多个空格"它可以在两个方向......如果有能力在Matcher API中做到这一点。)。

答案 2 :(得分:1)

使用StringBuilder,这可能是您可以获得的紧凑。好消息是你不必经常处理很多指数。事实上,你不必耍弄任何人。

    String foo = "Product Description Test Potato ID1 ID2 QTY Rate1 Rate2    ";
    foo = foo.trim(); // get rid of any extra spaces, in case we have any, as a safety check

    //the code that does your work
    StringBuilder bar = new StringBuilder(foo);
    // we have to add the pipe 5 times
    for (int i = 5; i > 0; i--) { 
        bar.setCharAt(bar.lastIndexOf(" "), '|');
    }
    foo = bar.toString();

答案 3 :(得分:1)

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

    String actWord = "Product it a middle data Description ID1 ID2 QTY Rate1 Rate2";
    String outputWord = null;
    String[] arr = actWord.split(" ");

    StringBuffer buf = new StringBuffer();
    for (int i = 0; i < arr.length; i++) {
        System.out.println(arr[i] + "=" + (i < arr.length - 5));
        if (i < arr.length - 5) {
            buf.append(arr[i] + " ");

        } else
            buf.append("|" + arr[i]);
    }
    System.out.println("output - " + buf.toString().trim());

我希望这能解决你的需求。

答案 4 :(得分:-1)

反向,字符串。

根据空间进行解析/拆分。

将所有单词从解析/分割单词集中拉出来时重新反转所有单词。

不是超级优雅,但应该有效。