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

任务是让我从字符串中进行输出,例如“ 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...";

            }

        }

但这看起来很棘手,也许有人知道解决此问题的任何更易理解的方法?非常感谢您的协助和关注。


慕田峪9158850
浏览 157回答 3
3回答

慕尼黑5688855

找到“ 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

四季花海

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数组重新转换为交换后的字符串。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java