所以我正在尝试编写一个方法,通过插入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个大小的字符串。
如果有人能给我任何指示。事实证明这比实际听起来要困难得多......
答案 0 :(得分:1)
您将使用
获取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;
}
(未测试的)
考虑到每个实体都被拆分,您可以轻松地使用该列表来执行您想要的任何操作。连接它们