Saya telah "Hello World"
disimpan dalam variabel String bernama hi
.
Saya perlu untuk mencetak, tetapi terbalik.
Bagaimana saya bisa melakukan ini? Saya mengerti ada beberapa jenis fungsi yang sudah built-in ke Jawa yang melakukan itu.
Terkait: Membalikkan masing-masing individu kata-kata "Hello World" string dengan Java
Anda dapat menggunakan ini:
new StringBuilder(hi).reverse().toString()
Atau, untuk versi sebelumnya dari JDK 1.5, menggunakan jawa.util.StringBuffer
bukan StringBuilder
— mereka yang sama-sama memiliki API. Terima kasih komentator untuk menunjukkan bahwa StringBuilder
lebih disukai saat ini ketika tidak ada concurrency perhatian.
Untuk Online Juri masalah yang tidak memungkinkan StringBuilder
atau StringBuffer
, anda bisa melakukannya di tempat menggunakan char[]
sebagai berikut:
public static String reverse(String input){
char[] in = input.toCharArray();
int begin=0;
int end=in.length-1;
char temp;
while(end>begin){
temp = in[begin];
in[begin]=in[end];
in[end] = temp;
end--;
begin++;
}
return new String(in);
}
public static String reverseIt(String source) {
int i, len = source.length();
StringBuilder dest = new StringBuilder(len);
for (i = (len - 1); i >= 0; i--){
dest.append(source.charAt(i));
}
return dest.toString();
}
http://www.java2s.com/Code/Java/Language-Basics/ReverseStringTest.htm
Saya melakukan ini dengan menggunakan dua cara berikut:
Reverse string dengan KARAKTER:
public static void main(String[] args) {
// Using traditional approach
String result="";
for(int i=string.length()-1; i>=0; i--) {
result = result + string.charAt(i);
}
System.out.println(result);
// Using StringBuffer class
StringBuffer buffer = new StringBuffer(string);
System.out.println(buffer.reverse());
}
Reverse string dengan kata-KATA:
public static void reverseStringByWords(String string) {
StringBuilder stringBuilder = new StringBuilder();
String[] words = string.split(" ");
for (int j = words.length-1; j >= 0; j--) {
stringBuilder.append(words[j]).append(' ');
}
System.out.println("Reverse words: " + stringBuilder);
}
Berikut adalah contoh menggunakan rekursi:
public void reverseString() {
String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
String reverseAlphabet = reverse(alphabet, alphabet.length()-1);
}
String reverse(String stringToReverse, int index){
if(index == 0){
return stringToReverse.charAt(0) + "";
}
char letter = stringToReverse.charAt(index);
return letter + reverse(stringToReverse, index-1);
}
Saya mencoba, hanya untuk bersenang-senang, dengan menggunakan Stack. Berikut kode saya:
public String reverseString(String s) {
Stack<Character> stack = new Stack<>();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
stack.push(s.charAt(i));
}
while (!stack.empty()) {
sb.append(stack.pop());
}
return sb.toString();
}
Berikut ini adalah tingkat rendah solusi:
import java.util.Scanner;
public class class1 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String inpStr = in.nextLine();
System.out.println("Original String :" + inpStr);
char temp;
char[] arr = inpStr.toCharArray();
int len = arr.length;
for(int i=0; i<(inpStr.length())/2; i++,len--){
temp = arr[i];
arr[i] = arr[len-1];
arr[len-1] = temp;
}
System.out.println("Reverse String :" + String.valueOf(arr));
}
}
Sejak metode di bawah ini (menggunakan XOR) untuk reverse string tidak terdaftar, saya melampirkan metode ini untuk membalik string.
The Algoritma didasarkan pada :
1.(A XOR B) XOR B = A
2.(A XOR B) XOR A = B
Potongan kode:
public class ReverseUsingXOR {
public static void main(String[] args) {
String str = "prateek";
reverseUsingXOR(str.toCharArray());
}
/*Example:
* str= prateek;
* str[low]=p;
* str[high]=k;
* str[low]=p^k;
* str[high]=(p^k)^k =p;
* str[low]=(p^k)^p=k;
*
* */
public static void reverseUsingXOR(char[] str) {
int low = 0;
int high = str.length - 1;
while (low < high) {
str[low] = (char) (str[low] ^ str[high]);
str[high] = (char) (str[low] ^ str[high]);
str[low] = (char) (str[low] ^ str[high]);
low++;
high--;
}
//display reversed string
for (int i = 0; i < str.length; i++) {
System.out.print(str[i]);
}
}
}
Output:
keetarp
Seperti orang lain telah menunjukkan cara yang lebih disukai adalah dengan menggunakan:
new StringBuilder(hi).reverse().toString()
tapi jika anda ingin menerapkan hal ini dengan sendirinya, aku'am takut bahwa sisa responses memiliki kekurangan.
Alasannya adalah String yang mewakili daftar Unicode poin, dikodekan dalam char[]
hotel yang sesuai untuk variable-length encoding: UTF-16.
Ini berarti beberapa poin kode menggunakan satu elemen dari array (satu kode unit) tetapi yang lain menggunakan dua dari mereka, sehingga mungkin ada pasangan-pasangan dari karakter-karakter yang harus diperlakukan sebagai satu unit (berturut-turut "tinggi" dan "murah" pengganti)
public static String reverseString(String s) {
char[] chars = new char[s.length()];
boolean twoCharCodepoint = false;
for (int i = 0; i < s.length(); i++) {
chars[s.length() - 1 - i] = s.charAt(i);
if (twoCharCodepoint) {
swap(chars, s.length() - 1 - i, s.length() - i);
}
twoCharCodepoint = !Character.isBmpCodePoint(s.codePointAt(i));
}
return new String(chars);
}
private static void swap(char[] array, int i, int j) {
char temp = array[i];
array[i] = array[j];
array[j] = temp;
}
public static void main(String[] args) throws Exception {
FileOutputStream fos = new FileOutputStream("C:/temp/reverse-string.txt");
StringBuilder sb = new StringBuilder("Linear B Syllable B008 A: ");
sb.appendCodePoint(65536); //http://unicode-table.com/es/#10000
sb.append(".");
fos.write(sb.toString().getBytes("UTF-16"));
fos.write("\n".getBytes("UTF-16"));
fos.write(reverseString(sb.toString()).getBytes("UTF-16"));
}
System.out.print("Please enter your name: ");
String name = keyboard.nextLine();
String reverse = new StringBuffer(name).reverse().toString();
String rev = reverse.toLowerCase();
System.out.println(rev);
Saya menggunakan metode ini untuk mengubah nama belakang dan ke bawah.
1. Menggunakan Array Karakter:
public String reverseString(String inputString) {
char[] inputStringArray = inputString.toCharArray();
String reverseString = "";
for (int i = inputStringArray.length - 1; i >= 0; i--) {
reverseString += inputStringArray[i];
}
return reverseString;
}
2. Menggunakan StringBuilder:
public String reverseString(String inputString) {
StringBuilder stringBuilder = new StringBuilder(inputString);
stringBuilder = stringBuilder.reverse();
return stringBuilder.toString();
}
ATAU
return new StringBuilder(inputString).reverse().toString();
Kita dapat menggunakan split() memecah string .Kemudian menggunakan reverse loop dan menambahkan karakter.
class test
{
public static void main(String args[])
{
String str = "world";
String[] split= str.split("");
String revers = "";
for (int i = split.length-1; i>=0; i--)
{
revers += split[i];
}
System.out.printf("%s", revers);
}
}
//output : dlrow
Hanya Untuk bersenang-Senang..:)
Algorithm (str,len)
char reversedStr[] =new reversedStr[len]
Traverse saya dari 0 ke len/2 dan kemudian
reversedStr[i]=str[len-1-i]
reversedStr[len-1=i]=str[i]
return reversedStr;
Kompleksitas waktu O(n)
Ruang Kompleksitas :O(n)
public class Reverse {
static char reversedStr[];
public static void main(String[] args) {
System.out.println(reversestr("jatin"));
}
private static String reversestr(String str) {
int strlen = str.length();
reversedStr = new char[strlen];
for (int i = 0; i <= strlen / 2; i++) {
reversedStr[i] = str.charAt(strlen - 1 - i);
reversedStr[strlen - 1 - i] = str.charAt(i);
}
return new String(reversedStr);
}
}
Salah satu cara alami untuk membalikkan String
adalah dengan menggunakan StringTokenizer
dan sebuah stack. Stack
adalah kelas yang mengimplementasikan mudah-ke-menggunakan last-in, first-out (LIFO) tumpukan benda-benda.
String s = "Hello My name is Sufiyan";
Meletakkannya di tumpukan frontwards
Stack<String> myStack = new Stack<>();
StringTokenizer st = new StringTokenizer(s);
while (st.hasMoreTokens()) {
myStack.push(st.nextToken());
}
Mencetak stack mundur
System.out.print('"' + s + '"' + " backwards by word is:\n\t\"");
while (!myStack.empty()) {
System.out.print(myStack.pop());
System.out.print(' ');
}
System.out.println('"');