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

时间:2018-07-13 16:01:23

标签: java

任务是要求我从字符串中输入,例如“ 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...";
            }
        }

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

4 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分: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数组重新转换为交换后的字符串。

答案 2 :(得分:3)

这是我能想到的最简单的方法。

public String swapAO(String s) {
    int a = s.indexOf('a');
    int o = s.lastIndexOf('o');
    if (a < 1 || o < 1) return s;
    String beforeA = s.substring(0, a);
    String between = s.substring(a + 1, o);
    String afterO = s.substring(o + 1);
    return beforeA + 'o' + between + 'a' + afterO;
}

简单地说,indexOflastIndexOf返回字符的第一/最后位置;如果不存在该字符,则返回负数。该代码说:“找到第一个'a'和最后一个'o',然后在'a', between the'a'and'o'{ {1}}'o', and after the'a', and join them back together with the'o'`切换”。

NB:and返回从substring(from, to)开始并在 before from之前终止的字符串部分,即to包含在内,{{1 }} 不是。另外,使用from比转换为to然后再转换为substring的效率更高,因为char[]不会从原始字符串复制文本,而是使用相同的字符数组作为内部的原始字符串。

如果需要,您也可以使用Regex。

String

答案 3 :(得分:1)

这是使用纯正则表达式的另一种方式:

import requests
import re

web = requests.Session()
site_token = web.get("https://www.enjoei.com.br/usuario/identifique-se")
get_token = re.search('<form class="Search js-ui-search" role="search" data-search-auto-init="true" action="/busca" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="&#x2713;"/><input type="hidden" name="authenticity_token" value="(.+?)"/>', site_token.text).group(1)
req = web.post("https://www.enjoei.com.br/usuario/identifique-se",
    data={"utf8":"✓", "authenticity_token":get_token, "user[pid]", "user[email]":"example@gmail.com", "user[password]":"123456", "user[remember_me]":"1", "user[unique_token]="})
print(get_token)