所以我正在做一个项目,在这个项目中,我必须将包含希腊字母的字符串转换为包含该字母的英文表示形式的字符串。所以一个希腊人α
会变成alpha
和 Α
会变成Alpha
.
我创建了一个 HashMap,它具有从 Unicode 字符到普通字符串的适当转换。
我使用了一个简单的 For
循环检查是否 Char
在输入String
是 Key
在HashMap
如果是,那么我将使用 StringBuilder
附加它的替换.这是我用来执行此操作的代码:
char[] ca = snippet.toCharArray();
StringBuilder out = new StringBuilder();
for (char c : ca) {
if (GREEK_LETTER_DICT.containsKey(Character.toString(c))) {
out.append( GREEK_LETTER_DICT.get(Character.toString(c)));
} else {
out.append(c);
}
}
return out.toString();
这是在带有 String
的公共(public)静态方法中作为输入。
我想知道的是是否可以用 lambda 表达式做同样的事情?我已经找到了几个替代 Character
的解决方案在String
但他们不使用 HashMap
/Dictionary
.
我知道为了使用 lambda 表达式而将其转换为 lambda 表达式是完全没有用的,但是因为我有另外 7 个这样的函数将我的代码缩短了近 60% 我想看看它是否完全有可能在“一行”代码中做到这一点。这样我就可以减少使用的单独方法的数量并获得更清晰的代码。
到目前为止,我已经找到了一种方法来转换 String
到 Stream
使用:
String.chars()
然后转换这个 IntStream
到 Stream<Character>
与
.mapToObj(ch -> (char) ch)
并过滤以查看是否 Character
在HashMap
与
.filter(ch -> (GREEK_LETTER_DICT.containsKey(ch)))
问题在于我做不到
- 附加原件
Character
到输出String
如果它不在HashMap
中 - 替换
Character
使用HashMap
中的字符串
因此,如果您对这两点有任何帮助,我们将不胜感激。我发现有时候我的想法是错误的,因为我没有看是否 Character
在String
等于 Character
在选项列表中,我应该检查该选项列表是否返回正数 index
.所以这个(伪代码):
"StringWithOptions".indexOf('characterLiteral')
而不是这个:
Character.equals("One|of|these")
最佳答案
怎么样:
public static String replaceGreekLetters(String snippet) {
return snippet
.chars()
.mapToObj(c -> (char) c)
.map(c -> GREEK_LETTER_DICT.getOrDefault(c, c.toString()))
.collect(Collectors.joining());
}
关于java - 使用 Lambda 表达式使用 HashMap 替换字符串中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38246623/