如何在Java中交换String字符?

如何在String交换两个字符? 例如, "abcde"将变为"bacde"

由于String对象是不可变的,通过toCharArray char[] ,交换字符,然后通过String(char[])构造函数从char[]创建一个新的String将起作用。

以下示例交换第一个和第二个字符:

 String originalString = "abcde"; char[] c = originalString.toCharArray(); // Replace with a "swap" function, if desired: char temp = c[0]; c[0] = c[1]; c[1] = temp; String swappedString = new String(c); System.out.println(originalString); System.out.println(swappedString); 

结果:

 abcde bacde 

‘在’字符串中,你不能。 字符串是不可变的。 您可以轻松地创建第二个字符串:

  String second = first.replaceFirst("(.)(.)", "$2$1"); 

这已经回答了几次,但这里还有一个只是为了好玩:-)

 public class Tmp { public static void main(String[] args) { System.out.println(swapChars("abcde", 0, 1)); } private static String swapChars(String str, int lIdx, int rIdx) { StringBuilder sb = new StringBuilder(str); char l = sb.charAt(lIdx), r = sb.charAt(rIdx); sb.setCharAt(lIdx, r); sb.setCharAt(rIdx, l); return sb.toString(); } } 
 static String string_swap(String str, int x, int y) { if( x < 0 || x >= str.length() || y < 0 || y >= str.length()) return "Invalid index"; char arr[] = str.toCharArray(); char tmp = arr[x]; arr[x] = arr[y]; arr[y] = tmp; return new String(arr); } 

String.toCharArray()将为您提供表示此字符串的字符数组。

您可以在不更改原始字符串(交换所需的任何字符)的情况下更改此设置,然后使用String(char [])创建新字符串。

请注意,字符串是不可变的 ,因此您必须创建一个新的字符串对象。

 StringBuilder sb = new StringBuilder("abcde"); sb.setCharAt(0, 'b'); sb.setCharAt(1, 'a'); String newString = sb.toString(); 

String.replaceAll()或replaceFirst()

 String s = "abcde".replaceAll("ab", "ba") 

链接到JavaDocs String API

以下是用于递归交换java字符的java示例代码。您可以在http://java2novice.com/java-interview-programs/string-reverse-recursive/获取完整的示例代码。

 public String reverseString(String str){ if(str.length() == 1){ return str; } else { reverse += str.charAt(str.length()-1) +reverseString(str.substring(0,str.length()-1)); return reverse; } } 
 import java.io.*; class swaping { public static void main(String args[]) { String name="premkumarg"; int len=name.length(); char[] c = name.toCharArray(); for(int i=0;i 

这是一个使用StringBuilder的解决方案。 它支持使用填充字符填充带有不均匀字符串长度的字符串。 正如您所猜测的那样,这种方法是针对hex – 半字节交换的。

 /** * Swaps every character at position i with the character at position i + 1 in the given * string. */ public static String swapCharacters(final String value, final boolean padding) { if ( value == null ) { return null; } final StringBuilder stringBuilder = new StringBuilder(); int posA = 0; int posB = 1; final char padChar = 'F'; // swap characters while ( posA < value.length() && posB < value.length() ) { stringBuilder.append( value.charAt( posB ) ).append( value.charAt( posA ) ); posA += 2; posB += 2; } // if resulting string is still smaller than original string we missed the last // character if ( stringBuilder.length() < value.length() ) { stringBuilder.append( value.charAt( posA ) ); } // add the padding character for uneven strings if ( padding && value.length() % 2 != 0 ) { stringBuilder.append( padChar ); } return stringBuilder.toString(); } 
 public static String shuffle(String s) { List letters = Arrays.asList(s.split("")); Collections.shuffle(letters); StringBuilder t = new StringBuilder(s.length()); for (String k : letters) { t.append(k); } return t.toString(); } 

我认为这应该有所帮助。

 import java.util.*; public class StringSwap{ public static void main(String ar[]){ Scanner in = new Scanner(System.in); String s = in.next(); System.out.println(new StringBuffer(s.substring(0,2)).reverse().toString().concat(s.substring(2))); } } 

return str.charAt(1)+ str.charAt(0)+ str.substring(2); //将交换字符串中的前两个字符