为了账号安全,请及时绑定邮箱和手机立即绑定

将字母“ a”的第一个出现与字母“ o”的最后一个出现交换位置

将字母“ a”的第一个出现与字母“ o”的最后一个出现交换位置

慕田峪9158850 2021-05-20 18:14:47
任务是让我从字符串中进行输出,例如“ aaligatoor”,输出类似:“ oaligatoar”,我发现了一个解决方案,例如:public static String letterReplacement(final String word) {            String o = "o";            String a = "a";            if (word.contains("a") && word.contains("o")) {                return word.replaceFirst("a", "o")                           .replaceFirst("(?s)(.*)" + 'o', "$1" + 'a');            } else {                return "Your word does not contain both of 'a' and 'o' letters, sorry...";            }        }但这看起来很棘手,也许有人知道解决此问题的任何更易理解的方法?非常感谢您的协助和关注。
查看完整描述

3 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

找到“ a”的第一个索引(String.indexOf())和“ o”的最后一个索引(String.lastIndexOf())。如果两个索引均大于-1,则交换字母


就像是:


public class StackOverflow {

    public static void main(String[] args) {

        String data = "aaligatoor";


        int firstAindex = data.indexOf("a");

        int lastOindex = data.lastIndexOf("o");


        if (firstAindex > -1 && lastOindex > -1) {

            char[] letters = data.toCharArray();

            letters[firstAindex] = 'o';

            letters[lastOindex] = 'a';


            data = new String(letters);

        }

        System.out.println(data);

    }

}

结果


oaligatoar


查看完整回答
反对 回复 2021-05-26
?
四季花海

TA贡献1811条经验 获得超5个赞

String s = "aalligatoor";

int oIndex = s.lastIndexOf('o');

int aIndex = s.indexOf('a');

if (oIndex > -1 && aIndex > -1) {

   char[] stringArray = s.toCharArray();

   stringArray[oIndex] = 'a';

   stringArray[aIndex] = 'o';

   s = new String(stringArray);

   System.out.println(s);

}

应该可以在空间和时间上明智。而且很容易理解和理解。


该indexOf方法返回-1,如果字母没有在字符串中找到。因此,我们可以进行检查,只需将字母分配给char数组中的位置即可。请记住,Java中的字符串是不可变的,因此我们不能将新位置分配给原始字符串。


最后,我们可以将char数组重新转换为交换后的字符串。


查看完整回答
反对 回复 2021-05-26
  • 3 回答
  • 0 关注
  • 156 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信