我有一个文本区域,其中我限制用户在一行中输入多于15个字符,因为我想将自由流文本分成最大限制为15个字符的子串并为每行分配一个订单号。 这就是我在java类中所做的事情:
int interval = 15;
items = new ArrayList();
TextItem item = null;
for (int i = 0; i < text.length(); i = i + interval) {
item = new TextItem ();
item.setOrder(i);
if (i + interval < text.length()) {
item.setSubText(text.substring(i, i + interval));
items.add(item);
}
else {
item.setSubText(text.substring(i));
items.add(item);
}
}
现在它正常工作,除非用户按下回车键。 每当用户按下回车键时,我想将该行作为仅具有该部分作为子文本的新项目。
我可以检查我的text.substring(i, i + interval
)是否包含任何"\n"
并在此之前进行拆分,但问题是在"\n"
之后的剩余字符到下一个15或直到下一个{{1}并设置正确的顺序和子文本。
答案 0 :(得分:0)
您可以改变处理顺序:首先,在出现'\ n'时分割文本区域的内容。然后取出每个结果字符串并将它们分成最大长度为15的部分。
编辑:我不完全确定你想做什么,但这就是我要做的。请注意,我不是Java程序员,因此我可能会做出错误的假设,以下内容未经测试。
int interval = 15;
items = new ArrayList();
lines = text.split("\n");
for (int i = 0; i < lines.length(); i++)
{
str = lines[i];
while (str.length() > interval)
{
items.add(str.substring(0,interval)); // add the first 15 characters of str to the list
str = str.substring(interval); // ... and remove them from str
}
items.add(str); // add the rest
}
之后,items是一个正确顺序的字符串ArrayList。应该可以将此代码扩展为您需要使用实际字符串存储的任何其他信息。
答案 1 :(得分:0)
这是你想要做的吗?
public static void main(String[] args)
{
String str =
"\n\n123456789ABCDEF123456\n123456789AB\n\n123" +
"456789ABCDEF123456789AB\n123456789ABCDEF\n";
List<String> parts = new ArrayList<String>();
// remove leading line separators
str = str.replaceFirst("\\A[\r\n]+", "");
// match up to 15 non-newline characters, but don't
// match a zero-length string at the end
Matcher m = Pattern.compile("(?!\\z).{0,15}").matcher(str);
while (m.find())
{
parts.add(m.group());
}
for (String s : parts)
{
System.out.println(s);
}
}
结果:
123456789ABCDEF 123456 123456789AB 123456789ABCDEF 123456789AB 123456789ABCDEF