java - 在其连续出现之后返回每个字符
问题描述
我想在每个字符连续出现之后返回它
例如:
输入:GeeeEEKKKss
输出:1G3e2E3K2s
输入:ccccOddEEE
输出:4c1O2d3E
我已经开发了这段代码,它运行良好,但我正在寻找是否可以使用带有 lambda 表达式的 java 8 解决这个问题,或者是否有更好的解决方案。
public static String encode(String plaintext ) {
String str = "";
for (int i = 0; i < plaintext.length(); i++) {
// Counting occurrences of s[i]
int count = 1;
while (i + 1 < plaintext.length()
&& plaintext.charAt(i)
== plaintext.charAt(i + 1)) {
i++;
count++;
}
str += String.valueOf(count) + plaintext.charAt(i);
}
return str;
}
解决方案
这是一种使用正则表达式和 lambda 表达式的解决方案,但它需要 Java 9 或更高版本。
public static String encode(String plaintext) {
return Pattern.compile("(.)\\1*").matcher(plaintext)
.replaceAll(m -> m.group().length() + m.group(1));
}
对于完整的 Unicode 支持,包括。表情符号和字形簇,应该是:
public static String encode(String plaintext) {
return Pattern.compile("(\\X)\\1*").matcher(plaintext)
.replaceAll(m -> (m.end() - m.start()) / (m.end(1) - m.start(1)) + m.group(1));
}
推荐阅读
- php - 在 WordPress /Woocommerce 中将输入数字字段值输入到 PHP 中
- python - Python 模块不会导入
- node.js - 在反应应用程序上反应 Toastr
- python-3.x - 应该使用来自 NTP 时间服务器的什么时间来设置我的时钟?
- html - 引导移动视图无法正常工作
- java - 如何从 Firebase 数据库中检索模型对象列表
- python - 使用 Python 的条件语句中多个逻辑运算符的间歇性问题
- vim - 在 lua.init 文件中设置 vimwiki_list
- javascript - 使用对象中的多个值过滤对象数组
- node.js - MongoDB 正则表达式和运算符 - 如何通过两个值查找