我是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>"
是否有可能实现这一目标?
答案 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>";
}