将多个句子的字符串拆分为单个句子,并用html标记将其包围

时间:2018-08-24 14:00:49

标签: java string substring

我是Java初学者,目前正在寻找一种基于定界符(。)将字符串message拆分为子字符串的方法。理想情况下,我当时只有一个句子,并且我想将每个句子包装在HTML标记中,即。 e。 <p></p>

我在BreakIterator类中尝试了以下操作:

    BreakIterator iterator = BreakIterator.getSentenceInstance(Locale.ENGLISH);
    List<String> sentences = new ArrayList<String>();
    iterator.setText(message);
    int start = iterator.first();
    String newMessage= "";
    for (int end = iterator.next();
         end != BreakIterator.DONE;
         start = end, end = iterator.next()) {
         newMessage= "<p>"+ message.substring(start,end) + "</p>";
         sentences.add(newMessage);
    }

这将返回一句话。我被困在这里,我也想将每个数字包装在每个句子中。

我的字符串包含类似以下内容的

    String message = "Hello, John. My phone number is: 02365897458. 
                      Please call me tomorrow morning, at 8 am."

输出应为:

String newMessage = "<p>Hello, John.</p><p>My phone number is: 
                     <number>02365897458</number>.
                    </p><p>Please call me tomorrow morning, at 8 am.</p>"

是否有可能实现这一目标?

4 个答案:

答案 0 :(得分:1)

在Java字符串上尝试split方法。您可以分割.,它将返回一个字符串数组。

https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#split-java.lang.String-

答案 1 :(得分:1)

使用StringTokenizer类和StringBuilder类可以轻松完成此操作:

String message = SOME_STRING;
StringBuilder builder = new StringBuilder();
StringTokenizer tokenizer = new StringTokenizer(message, ".");
while(tokenizer.hasMoreTokens()) {
    builder.append("<p>");
    builder.append(tokenizer.nextToken());
    builder.append("</p>");
}
return builder.toString();

您可以根据需要为各种标签添加更多定界符。

答案 2 :(得分:0)

可以通过在开头添加<p>,在结尾添加</p>并用.</p><p>代替每个句点来归档环绕句。看一下字符串的replace方法。

要添加数字标签,可以使用正则表达式替换。 replaceAll方法和[0-9]+之类的正则表达式可以做到这一点。

类似的事情应该起作用(未经测试):

newMessage = "<p>" + message.replace(".", ".</p><p>")
                            .replaceAll("([0-9]+)", "<number>$1</number>") + 
             "</p>"

答案 3 :(得分:0)

如上所述,您可以使用split方法。因为您要分割点,所以一定要在正则表达式中对此进行转义。一个简单的示例(还有其他保留分隔符的方法,但是为了您的起见,为了简化起见,我已经这样做了);

    String toSplit = "Hello, John. My phone number is: 02365897458. Please call me tomorrow morning, at 8 am.";
    String[] tokens = toSplit.split("\\.");
    for(String token : tokens) {
        token = "<p>" + token + ".</p>";
    }