java - 交换字符串的第一个和最后一个字母

标签 java

我正在制作一个程序,它将切换字符串的第一个和最后一个字母,但是当我运行它时,它只是将最后一个字母替换为第一个字母,就是这样。

public static String swap(String String3) {
    //finds first & last letter of string
    String firstLetter =  String3.substring(0, 1);
    String lastLetter = String3.substring(String3.length() - 1);
    String a = String3.replace(firstLetter, lastLetter); 
    String z = a.replace(lastLetter, firstLetter );
    return z;
public static void main(String[] args){
    System.out.print("Enter your swap string: ");
    Scanner scan = new Scanner(System.in);
    String String3 = scan.nextLine();
    System.out.println(swap(String3));
    }

谁能告诉我我做错了什么?

最佳答案

String.replace 将所有出现的第一个字符替换为第二个字符。那不是你想要的。作为示例,我们假设文本 abc。第一个替换将导致 cbc,第二个替换将导致 aba,这就是您所看到的。输入字符串 abab 将生成 aaaa 作为结果。

您需要创建一个新的String来获取您想要的交换:

char first = text.charAt(0);
char last = text.charAt(text.length() - 1);
return last + text.substring(1, text.length() - 2) + last;

或者您可以使用正则表达式:

text.replaceAll("^(.)(.*)(.)$", "$3$2$1");

如果输入文本的长度足够长,我跳过了测试,因此输入文本 a 将导致第一个解决方案出现错误。第二个解决方案仍然有效,因为正则表达式不匹配并且不会进行替换。

关于java - 交换字符串的第一个和最后一个字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54796070/

相关文章:

java - getPreferredSize() 在 pack() 之后仅调用两次

java - 为什么在为对象设置值时会收到 NullPointerExceptions?

java - wasAcknowledged 标志在 mongodb 3.3.0 以上的实现

java - 使用递归的 O(n^2) 的最大递增子序列

java - 如何使用子查询.in

java - 这种情况的具体数据类型?

java - 在 ws 端点部署中检测到 Apache CXF 库

java - JPA 查询调用 getter 数百万次

java - 使用 Java-8 Streams API 将字符串列表转换为映射

java - Hadoop MapReduce 不写入输出