【发布时间】:2020-03-31 09:52:48
【问题描述】:
我想使用 lambda 表达式而不是经典的 for。
String str = "Hello, Maria has 30 USD.";
String[] FORMAT = {"USD", "CAD"};
final String simbol = "$";
// This was the initial implementation.
// for (String s: FORMAT) {
// str = str.replaceAll(s + "\\s", "\\" + FORMAT);
// }
Arrays.stream(FORMAT).forEach(country -> {
str = str.replaceAll(country + "\\s", "\\" + simbol);
});
// and I tried to do like that, but I receiced an error
// "Variable used in lambda expression should be final or effectively final"
// but I don't want the str String to be final
对于任何字符串,我想在 $ simbol 中更改 USD 或 CAD。
如何更改此代码以使其正常工作?提前致谢!
【问题讨论】:
-
使用
Matcher.quoteReplacement(simbol)而不是"\\" + simbol。 -
但是,正如 Andronicus 在下面的答案中指出的那样,您的原始循环是正确的方法。
-
预期输出是什么?
-
您想使用 streams,而不是 lambda 表达式。
标签: java arrays regex lambda java-8