Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-将字符串拆分为具有字符限制的句子_Java_Android_Regex_String_Split - Fatal编程技术网

Java-将字符串拆分为具有字符限制的句子

Java-将字符串拆分为具有字符限制的句子,java,android,regex,string,split,Java,Android,Regex,String,Split,我想将文本拆分为句子(按或BreakIterator拆分)。 但是:每个句子不能超过100个字符 例如: Lorem ipsum dolor sit. Amet consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolor

我想将文本拆分为句子(按或BreakIterator拆分)。 但是:每个句子不能超过100个字符

例如:

Lorem ipsum dolor sit. Amet consetetur sadipscing elitr,
sed diam nonumy eirmod tempor invidunt ut labore et dolore
magna aliquyam erat, sed diam voluptua. At vero eos et accusam
et justo duo dolores.
To:(3个元素,不打断一个单词,但打断一个句子)


我怎样才能正确地做到这一点呢?

可能有更好的方法,但这里有:

public static void main(String... args) {

    String originalString = "Lorem ipsum dolor sit. Amet consetetur sadipscing elitr,sed diam nonumy eirmod tempor invidunt ut labore "
            + "et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores.";


    String[] s1 = originalString.split("\\.");
    List<String> list = new ArrayList<String>();

    for (String s : s1)
        if (s.length() > 100)
            list.addAll(Arrays.asList(s.split("(?<=\\G.{100})")));
        else
            list.add(s);

    System.out.println(list);
}
publicstaticvoidmain(字符串…参数){
String originalString=“Lorem ipsum door sit.Amet consetetur sadipscing elitr,sed diam nonumy eirmod temporal invidunt ut laboure”
+“在vero eos和accusam以及justo duo dolores,这是一个巨大的数字。”;
字符串[]s1=originalString.split(“\\”);
列表=新的ArrayList();
用于(字符串s:s1)
如果(s.长度()>100)

在这种情况下,list.addAll(Arrays.asList(s.split)((?Regex)对您帮助不大

我会使用空格或
拆分文本,然后开始连接。类似于这样:

伪码

words = text.split("[\s\.]");
lines = new List();
while ( words.length() > 0 ) {

  String line = new String();
  while ( line.length() + words.get(0).length() < 100 ) {
    line += words.get(0);
    words.remove(words.get(0));
  }

  lines.add(line);

}
words=text.split(“[\s\.]”);
行=新列表();
while(words.length()>0){
字符串行=新字符串();
while(line.length()+words.get(0.length()<100){
行+=字。获取(0);
words.remove(words.get(0));
}
行。添加(行);
}
已解决(感谢Macarse的启发):

String[]words=text.split((?=[\\s\\\.])”;
ArrayList数组=新的ArrayList();
int i=0;
while(words.length>i){
字符串行=”;
while(words.length>i&&line.length()+words[i].length()<100){
行+=字[i];
i++;
}
数组。添加(行);
}

按照前面的解决方案,我很快就遇到了一个问题,即当每个单词都可能超过限制时(不太可能,但不幸的是我有一个非常受限的环境)。因此,我为这个边缘情况(我想)添加了一个修复(有点)

import java.util.*;
公共班机
{
公共静态void main(字符串[]args){
句子句子(“在下列哪种情况下,一个人经常被另一个人或一群人跟踪/追赶?”,15);
}
专用静态ArrayList语句行(字符串s,整数限制){
字符串[]字=s.split((?=[\\s\\.]);
ArrayList wordList=新的ArrayList(Arrays.asList(words));
ArrayList数组=新的ArrayList();
int i=0,温度;
字符串字、行;
而(ilimit){
word=wordList.get(i);
添加(i++,word.substring(0,limit));
wordList.add(i,word.substring(limit));
删除(i+1);
}
i=温度;
//继续用新拆分的单词造行

虽然(iwords = text.split("[\s\.]"); lines = new List(); while ( words.length() > 0 ) { String line = new String(); while ( line.length() + words.get(0).length() < 100 ) { line += words.get(0); words.remove(words.get(0)); } lines.add(line); }
String[] words = text.split("(?=[\\s\\.])");
ArrayList<String> array = new ArrayList<String>();
int i = 0;
while (words.length > i) {
    String line = "";
    while ( words.length > i && line.length() + words[i].length() < 100 ) {
        line += words[i];
        i++;
    }
    array.add(line);
}