String s = "John Stuart Mill";
String aFriendlyAssigneeName = s.substring(s.lastIndexOf('-')+1);
我目前可以从jstm -
删除jstm - John Stuart Mill
,但我不确定现在如何删除John之后的所有内容。
所有数据都采用initials - Fist Middle Last
格式。基本上我只想删除First
以外的所有内容。
我怎样才能做到这一点?也许在第三个空白区之后移除所有东西......
答案 0 :(得分:3)
我只是使用它,应该足够快,而且很短:
String aFriendlyAssigneeName = s.split(" ")[2];
(将字符串拆分到其中的空格,并获取数组的第三个成员,如果它们都采用该格式,则应该是第一个名称。)
答案 1 :(得分:2)
您正在寻找以下方法 -
s.substring(startIndex, endIndex);
这给出了一个开始和结束索引,这将帮助您轻松获得任何String的中间位置。
然后你可以用一点(我敢说)魔法找到最后一个索引......
endIndex = indexOf(" ", fromIndex)
来自索引的位置
s.lastIndexOf('-')+1
另外
如果子串不是"硬"要求,尝试使用
String[] words = s.split(" ");
这将返回由空格分隔的所有值的数组。
然后您可以只选择单词的索引。 (本案例[2])
答案 2 :(得分:2)
这应该有效:
String s = "jstm - John Stuart Mill";
String aFriendlyAssigneeName = s.substring(s.lastIndexOf('-')+1);
String aFriendlyAssigneeName = aFriendlyAssigneeName.substring(aFriendlyAssigneeName.indexOf(' '));
删除了首字母后,第一个名字在第一个空格后结束。
答案 3 :(得分:2)
为什么在没有首字母的情况下找到的字符串中第一次出现空格后才找到子字符串?
colnames(x) <- c("col1", "col2", "col3")
x
# col1 col2 col3
# 1 1 1 1
# 2 1 0 11
# 3 0 1 6
# 4 0 0 6
答案 4 :(得分:1)
在我看来,这是一个正则表达式的工作:.* - (\w+)? .*
final String value = "jstm - John Stuart Mill";
final Matcher matcher = Pattern.compile(".* - (\\w+)? .*").matcher(value);
matcher.matches();
System.out.println(matcher.group(1));
在我看来使用正则表达式vs子串:
优点:
缺点: