使用Java流API获取大写字符作为字符串
我试图通过以下方式获得大写字母:使用Java流API获取大写字符作为字符串,java,java-stream,Java,Java Stream,我试图通过以下方式获得大写字母: "My Name Is".chars() .filter(c-> c > 64 && c < 97 ) .collect(<??>); “我的名字是”.chars() .filter(c->c>64&&cc>64&&cabbr.append(Character.toChars(c)); 是否可以使用更好/更短的collect()构造?字符串结果= String result = "My Name Is".
"My Name Is".chars()
.filter(c-> c > 64 && c < 97 )
.collect(<??>);
“我的名字是”.chars()
.filter(c->c>64&&c<97)
.收集();
我不确定应该传递什么到collect()方法来获取字符列表或字符串
我的目标是解析字符串并获得另一个只有大写字母的字符串
这很好:
StringBuilder abbr=new StringBuilder();
"My Name Is".chars()
.filter(c -> c > 64 && c < 97)
.forEach(c->abbr.append(Character.toChars(c)));
StringBuilder abbr=new StringBuilder();
“我的名字是“.chars()
.filter(c->c>64&&c<97)
.forEach(c->abbr.append(Character.toChars(c));
是否可以使用更好/更短的collect()构造?字符串结果=
String result =
"My Name Is".chars()
.filter(c -> c > 64 && c < 97)
.collect(StringBuilder::new,
(sb, c) -> sb.append((char) c),
(sb1, sb2) -> sb1.append(sb2.toString()))
.toString();
“我的名字是“.chars()
.filter(c->c>64&&c<97)
.collect(StringBuilder::新建,
(sb,c)->sb.append((char)c),
(sb1,sb2)->sb1.append(sb2.toString())
.toString();
您可以使用收集器
请注意,我还使用字符.isUpperCase
或收集(StringBuilder::new,StringBuilder::appendCodePoint,StringBuilder::append)
字符.isUpperCase
。这是否违反了谓词接口。然而它interesting@sakhunzai为什么会违反它?我的意思是它通常是1参数->返回bool1格式。我只是在学习。您还可以添加一些collect()构造所需的描述。如果您有一个参数(int),isUpperCase将返回一个布尔值,那么我看不出在哪里违反了约定。对于collect,请看javadoc,它解释得很好。您不需要像在收集器中那样指定空的字符串。如果不需要分隔符,可以使用collector.joining()
String upper = "My Name Is".chars()
.filter(Character::isUpperCase)
.mapToObj(c -> Character.toString((char)c))
.collect(Collectors.joining());