在每个“”前面或160个字符处插入<split>字符串</split>

时间:2014-02-25 09:18:01

标签: java regex string split

所以我正在尝试编写一个方法,通过插入xml标记来分割超过160的字符串。我试图使用和修改java的wordWrap方法。但这似乎在句子或者句子上分开了句子。我不希望发生这种情况,因为这些字符串中包含ID,如下所示:FID.1262。

我目前的方法:

private String tests(String Message) {
    StringBuilder text = new StringBuilder(Message);
    int size = Message.length();
    int size1 = 160;
    while (!Message.substring(size1 - 1, size1).equals(" ")) {
        size1--;
        if (Message.substring(size1 - 1, size1).equals(" ")) {
            text.insert(size1, "<SPLIT>");
            text.replace(size1 - 1, size1, "");
            return "" + text;
        }
    }
    text.insert(size1, "<SPLIT>");
    text.replace(size1 - 1, size1, "");
    text.trimToSize();
    return "" + text;
}

输出:     这是一条测试消息,当while循环向后遍历字符串时将被拆分。然后它会在160个字符之前放置一个带有split in的xml标签。

问题是这个方法只会分裂一次字符串,无论它多长时间。我需要的是它能够在空间中每160个或更少的字符分割n个大小的字符串。

如果有人能给我任何指示。事实证明这比实际听起来要困难得多......

2 个答案:

答案 0 :(得分:1)

您需要的是java.text.BreakIterator

您将使用

获取Word Iterator
 BreakIterator#getWordInstance()

以下是如何使用它的示例:

public static void main(String args[]) {
  if (args.length == 1) {
      String stringToExamine = args[0];
      //print each word in order
      BreakIterator boundary = BreakIterator.getWordInstance();
      boundary.setText(stringToExamine);
      int start = boundary.first();
      for (int end = boundary.next();
        end != BreakIterator.DONE;
        start = end, end = boundary.next()) {
        System.out.println(stringToExamine.substring(start,end));
      }
   }
}

上面的示例打印字符串中的每个单词。您可以通过添加单词长度来操纵它,如果单词长度大于160,则不添加下一个单词而是添加

希望这有帮助。

答案 1 :(得分:0)

这可能会对您有所帮助:

private int static LENGTH = 160;
public static List<String> splitByLength(String text) {
    List<String> ret = new ArrayList<String>((text.length()/ LENGTH + 1);
    for (int start = 0; start < text.length(); start += size) {
        ret.add("<SPLIT>" + text.substring(start, Math.min(text.length(), start + size)) + "<SPLIT>");
    }
    return ret;
}

(未测试的)

考虑到每个实体都被拆分,您可以轻松地使用该列表来执行您想要的任何操作。连接它们

参考:Split string to equal length substrings in Java