java - 我正在用java编写一个函数,它将第一个字符放在第三位,只要单词是,它每三个字符重复一次
问题描述
以下是我拥有的功能,它给了我想要的结果,但我想知道是否有其他方法可以解决这个问题?可能是嵌套for循环?
public class RandomFunctionalities2 {
public String mixWords(String firstWord, String secondWord) {
return firstWord+secondWord;
}
public String switcheroo(String word) {
if (word.length() < 3) {
return word;
}
StringBuilder c = new StringBuilder();
int i;
for (i = 0; i < 3 * (word.length() / 3); i+=3)
c.append(word.substring(i + 1, i + 3) + word.charAt(i));
c.append(word.substring(i));
return c.toString();
}
}
测试*
public class testingRandomFunctionalities2 {
public static void main(String[] args) {
RandomFunctionalities2 rf1 = new RandomFunctionalities2();
System.out.println(rf1.switcheroo("george"));
System.out.println(rf1.switcheroo("you"));
}
}
测试结果*
eogger
ouy
Process finished with exit code 0
解决方案
另一种方法可能是在每 3 个字符处拆分您的输入,并在交换每个子字符串的第一个和第三个字符后加入:
public String switcheroo2(String word) {
String[] split = word.split("(?<=\\G...)");
StringBuilder sb = new StringBuilder();
for (String s : split){
if(s.length() > 2){
sb.append(s.substring(1)).append(s.charAt(0));
}
else {
sb.append(s);
}
}
return sb.toString();
}
您可以使用 Pattern 类和流通过执行以下操作来保存更多行:
public String switcheroo3(String word) {
UnaryOperator<String> op = str -> str.length() < 3 ? str : str.substring(1) + str.charAt(0);
return Pattern.compile("(?<=\\G...)")
.splitAsStream(word).map(op::apply)
.collect(Collectors.joining());
}
推荐阅读
- excel - 过滤单元格以根据其内容连接
- node.js - 如何等到所有数据都加载到Angular 2异步依赖的http调用中?
- git - Github 将提交推送到不同的文件夹结构
- sql - 使用 join 获取所有记录
- typescript - 根据接口中另一个属性的值设置属性名称
- c++ - 未定义的参考,使用 CUDA 的 OpenCV 中的 DisparityBilateralFilter
- javascript - TypeError: p 在使用 xtype: 'treepicker' 时未定义。Extjs6
- javascript - 在一行中显示具有相同键的对象
- prometheus - 如何使用 PromQL 的 hour() 函数?
- jira - 如何将多值、多级维度导入 EazyBI?