我需要一种方法来修复String
中找到的缩写中的大小写。假设所有缩写都正确间隔。
例如,
"Robert a.k.a. Bob A.k.A. dr. Bobby"
变为:
"Robert A.K.A. Bob A.K.A. Dr. Bobby"
正确的大写缩写将提前知道,存储在某种Collection
中。
我在考虑这样的算法:
private String fix(String s) {
StringBuilder builder = new StringBuilder();
for (String word : s.split(" ")) {
if (collection.contains(word.toUpperCase()) {
// word = correct abbreviation here
}
builder.append(word);
builder.append(" ");
}
return builder.toString().trim();
}
但据我所知,这种方法存在一些问题:
我感觉这可以用正则表达式解决,迭代匹配并替换正确的缩写。但如果没有,我该如何解决这个问题?
答案 0 :(得分:2)
我建议您使用实用程序库,而不是使用正则表达式或滚动自己的实现。 Apache Commons Lang中的WordUtils
非常适合这项工作:
String input = "Robert a.k.a. Bob A.k.A. dr. Bobby";
String capitalized = WordUtils.capitalize(input, '.', ' ');
System.out.println(capitalized);
打印出来
Robert A.K.A. Bob A.K.A. Dr. Bobby
答案 1 :(得分:1)
您不必使用正则表达式,即。你的解决方案看起来很合理(如果要处理大量数据,可能会很慢)。
对于包含小写字母的缩写,例如。博士你可以使用a case insensitive string comparison而不是function scrollTo($elem, offset, delay, $context){
delay = delay || 800;
offset = offset || 0;
$context = $context || $('html, body');
var a = $context.find('.large'); //need this
$context.animate({
scrollTop: $elem.offset().top - a.offset().top
}, delay);
}
。实际上,只有你自己直接比较字符串才有用。你真的需要一个不区分大小写的toUpperCase
。也许:
HashMap
如果缩写以标点符号开头或结尾,请确保集合中的相应键也是如此。
答案 2 :(得分:1)
这就是我的方式......
更新
阅读OP的评论后
打印:
罗伯特A.K.A. Bob A.K.A.博比博士o.o。
import java.util.ArrayList;
import java.util.List;
public class Fixer {
List<String> collection = new ArrayList<>();
public Fixer() {
collection.add("Dr.");
collection.add("A.K.A.");
collection.add("o.o.");
}
/* app entry point */
public static void main(String[] args) throws InterruptedException {
String testCase = "robert a.k.a. bob A.k.A. dr. bobby the o.o.";
Fixer l = new Fixer();
String result = l.fix(testCase);
System.out.println(result);
}
private String fix(String s) {
StringBuilder builder = new StringBuilder();
for (String word : s.split(" ")) {
String abbr = getAbbr(word);
if (abbr == null) {
builder.append(word.substring(0, 1).toUpperCase());
builder.append(word.substring(1));
} else {
builder.append(abbr);
}
builder.append(" ");
}
return builder.toString().trim();
}
private String getAbbr(String word) {
for (String abbr : collection) {
if (abbr.equalsIgnoreCase(word)) {
return abbr;
}
}
return null;
}
}