我正在尝试迭代以“ m”(而不是M)开头的数组列表中的所有首字符,并删除所有不以m或M开头的字符。 我在这里尝试了一个代码,该代码似乎帮助我删除了几个单词,但删除了我想要的单词,并且没有按我的需要将单词大写。这就是我记下我添加的一些代码的方式
int i = 0;
int j = 0;
for (i = 0; i < myNameList.size(); i++) {
String name = myNameList.get(i);
String[] names = name.split("\\s+");
StringBuilder sb = new StringBuilder();
for (j = 0; j < names.length; j++) {
if (j != 0) {
sb.append(' ');
}
sb.append(Character.toUpperCase(names[j].charAt(0)));
sb.append(names[j].substring(1).toLowerCase());
}
if (names[0] == "m") {
myNameList.set(i, sb.toString());
} else if ((names[0] != "m" && names[0] != "M")) {
myNameList.remove(i);
}
}//end for loop
System.out.println(myNameList);
结果:
输入您要输入的名称
插入前清单
墨尔本麦凯美人鱼海滩梅特兰Maroochydore Muwoolimbah Merriwether Monkeytown Troydon
[麦凯,梅特兰,Muwoolimbah,猴子镇]
删除后清单
麦凯梅特兰Muwoolimbah Monkeytown
删除后
else if ((names[0] != "m" || names[0] != "M")) {
myNameList.remove(i);
}
插入前列出
墨尔本麦凯美人鱼海滩梅特兰Maroochydore Muwoolimbah Merriwether Monkeytown Troydon
[墨尔本,麦凯,美人鱼海滩,梅特兰,Maroochydore,Muwoolimbah,Merriwether,Monkeytown和Troydon]
删除后清单
墨尔本麦凯美人鱼海滩梅特兰Maroochydore Muwoolimbah Merriwether Monkeytown Troydon
答案 0 :(得分:1)
您可以先过滤列表,以仅包含以m / M开头的单词。
然后大写第一个字母,最后收集到列表。
List<String> cleanList = list.stream()
.filter(s -> s.startsWith("m") || s.startsWith("M"))
.map(s -> s.startsWith("m")
? "M" + s.substring(1) : s)
.collect(Collectors.toList());
您应避免如下所示对“ m”进行硬编码:
完整示例
public static void main(String[] args) {
List<String> list = List.of("man", "Many", "notM");
System.out.println(cleanList(list, 'm'));
}
private static List<String> cleanList(List<String> list, char letter) {
return list.stream()
.filter(s -> Character.toUpperCase(s.charAt(0)) == Character.toUpperCase(letter))
.map(s -> Character.isLowerCase(s.charAt(0))
? Character.toUpperCase(s.charAt(0)) + s.substring(1) : s)
.collect(Collectors.toList());
}
输出
[很多人]
答案 1 :(得分:0)
一种更简单的方法是
for (String name : myNameList) {
String str = name.replaceAll("^m", "M"); // replace beginning `m` with `M`
if (str.charAt(0) == 'M')
{
newList.add (str);
}
}