Как переключить два элемента строки, разделенных подчеркиванием? - PullRequest
0 голосов
/ 02 мая 2020

Я понимаю, что строка неизменна и что мне нужно будет создать новую строку, но я не уверен, как поступить с этой информацией. Я приложил то, что у меня есть, и инструкции, любая помощь будет принята с благодарностью!

https://i.stack.imgur.com/lm7wv.png

Ответы [ 6 ]

1 голос
/ 02 мая 2020

Вы можете использовать String.split, но это требует регулярного выражения. И вы можете использовать регулярное выражение, которое проверяет _ перед @ и группирует совпадения. После этого вы можете использовать replaceAll для выполнения обмена. Так как он не будет работать со строкой, если нет совпадения, вы можете сделать это за одну операцию. Мол,

Stream.of("mike_tyson@gmail.com", "barrakobama@gmail.com").forEach(
        s -> System.out.println(s.replaceAll("^(.+)_(.+)@", "$2_$1@")));
1 голос
/ 02 мая 2020

Здесь вы go:

public static void main(String[] args) {

    String email = "mike_tyson@gmail.com";

    String[] parts = email.split("@");
    if (parts.length <= 1)
        throw new IllegalStateException("Invalid format");

    String[] nameParts = parts[0].split("_");

    String result = email;
    if (nameParts.length >= 2) {
        result = nameParts[1] + "_" + nameParts[0] + "@" + parts[1];
    }

    System.out.println("Swapped email is: " + result);

}
0 голосов
/ 02 мая 2020

Выполните следующие действия:

  1. Разбить входную строку на @, используя String :: split .
  2. Разбить первый элемент (строку по индексу 0) результирующего массива с шага # 1 на _.
  3. Если длина результирующего массива с шага # 2 равна 2, выведите [элементы с заменой позиций и _ включенный между ними + @ + второй элемент (строка с индексом 1) результирующего массива из шага # 1].
  4. Если длина результирующего массива из шага # 2 1, напечатайте строку ввода как есть.
import java.util.Scanner;

public class Testing {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("Enter the email address: ");
        String email = in.nextLine();
        String[] emailParts = email.split("@");
        if (emailParts.length == 2) {
            String[] userIdParts = emailParts[0].split("_");
            if (userIdParts.length == 2) {
                System.out.println(userIdParts[1] + "_" + userIdParts[0] + "@" + emailParts[1]);
            } else {
                System.out.println(email);
            }
        } else {
            System.out.println("Invalid input");
        }
    }
}

Примерный прогон:

Enter the email address: mike_tyson@gmail.com
tyson_mike@gmail.com

Другой примерный прогон:

Enter the email address: barakobama@gmail.com
barakobama@gmail.com
0 голосов
/ 02 мая 2020

Предполагая, что у вас есть только один '_', формирующий имя, вы можете вернуть имена таким образом (также используя indexOf)

    int indx = st.indexOf('@');
    String[] arrSt = st.substring(0,indx).split("_");
    String newName = arrSt[1] + "_" + arrSt[0];
    // and here you add the rest of the email part starting at @
0 голосов
/ 02 мая 2020

Другое (более чистое и лучшее) решение:

public static String swap(String email) {
    int i1 = email.lastIndexOf('@');
    if (i1 < 0)
        throw new IllegalStateException("Illegal format");

    int i2 = email.indexOf("_");
    if (i2 < 0 || i2 >= i1)
        return email;

    return email.substring(i2 + 1, i1) + "_" + email.substring(0, i2) + email.substring(i1);
}
0 голосов
/ 02 мая 2020

Вы можете перебрать свою строку с помощью For l oop, найдя индексы _ и @.
Затем вы можете использовать SubString, чтобы вырезать вашу строку (имя, фамилию) в новые строки.
И теперь вы можете соединить эти строки в новую. Вот мой код, дайте мне знать, если вы ничего не поняли.

int indexOf_ = -1; //index for _
int indexOfs2 = -1; //index for @
String email = scan.next();
if (email.contains("_"))
{
    for (int i=0;i<email.length();i++) //finding the index of '_' and '@'
    {
        if (email.charAt(i) == '_')
            indexOf_ = i;
        if (email.charAt(i) == '@')
            indexOfs2 = i;
    }

    String firstname = email.substring(0,indexOf_);
    String lastname = email.substring(indexOf_+1,indexOfs2);
    String newString = lastname + "_" + firstname + email.substring(indexOfs2,email.length());
    System.out.println(newString);
        }
        else
            System.out.println(email);
    }
...