で2 つの文字を入れ替えるにはどうすればよいString
ですか? たとえば、"abcde"
になり"bacde"
ます。
16 に答える
String
オブジェクトは不変であるため、viachar[]
に移動しtoCharArray
、文字を交換してから、コンストラクターを介して新しいString
fromを作成すると機能します。char[]
String(char[])
次の例では、最初の文字と 2 番目の文字を入れ替えています。
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
文字列の「中」では、できません。文字列は不変です。次のコマンドを使用して、2 番目の文字列を簡単に作成できます。
String second = first.replaceFirst("(.)(.)", "$2$1");
これは数回回答されていますが、ここでは楽しみのためにもう 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[])を使用して新しい文字列を作成できます。
文字列はimmutableであるため、新しい文字列オブジェクトを作成する必要があることに注意してください。
Java char を再帰的に交換するための 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.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)));
}
}
Here's a solution with a StringBuilder
. It supports padding resulting strings with uneven string length with a padding character. As you've guessed this method is made for hexadecimal-nibble-swapping.
/**
* 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();
}
String.replaceAll() または replaceFirst()
String s = "abcde".replaceAll("ab", "ba")
JavaDocs文字列 APIへのリンク
次のコード行は、 の最初の 2 文字を入れ替えますstr
。
return str.charAt(1) + str.charAt(0) + str.substring(2);
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<len-1;i=i+2)
{
char temp= c[i];
c[i]=c[i+1];
c[i+1]=temp;
}
System.out.println("Swapping string is: ");
System.out.println(c);
}
}