【问题标题】:How do I switch two elements of a string that are seperated by an underscore?如何切换由下划线分隔的字符串的两个元素?
【发布时间】:2020-05-01 22:04:51
【问题描述】:

我意识到字符串是不可变的,我需要创建一个新字符串,但我不确定如何继续处理该信息。我已经附上了我目前拥有的内容和说明,任何帮助将不胜感激!

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

【问题讨论】:

  • String 类有一个 split 方法。 docs.oracle.com/javase/8/docs/api/java/lang/…
  • 使用 String.split("_") 拆分字符串,这将返回一个 String[],您可以循环并反向构建结果字符串。
  • 请不要将文字包含在图片中。将文本粘贴到问题中,必要时使用“{}”进行格式化。

标签: java string java.util.scanner


【解决方案1】:

给你:

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);

}

【讨论】:

    【解决方案2】:

    您可以使用String.split,但这需要一个正则表达式。而且,您可以使用正则表达式在 @ 之前检查 _ 并将匹配分组。完成后,您可以使用replaceAll 执行交换。由于如果没有匹配项,它将不会对字符串进行操作,因此您可以执行一次操作。喜欢,

    Stream.of("mike_tyson@gmail.com", "barrakobama@gmail.com").forEach(
            s -> System.out.println(s.replaceAll("^(.+)_(.+)@", "$2_$1@")));
    

    【讨论】:

      【解决方案3】:

      假设您只有一个“_”构成名称,您可以通过这种方式恢复名称(也使用 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 @
      

      【讨论】:

        【解决方案4】:

        您可以使用For 循环遍历您的字符串,查找_@ 的索引。
        然后您可以使用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);
            }
        

        【讨论】:

          【解决方案5】:

          另一种(更清洁、更好)的解决方案:

          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);
          }
          

          【讨论】:

            猜你喜欢
            • 2013-09-20
            • 2015-02-10
            • 2018-09-28
            • 2017-07-13
            • 2015-01-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多