Stampa inversa di qualsiasi stringa senza utilizzare alcuna funzione predefinita?

Come stampare il retro della stringa java is object orientated language senza utilizzare alcuna funzione predefinita come reverse() ?

Puoi farlo in modo ricorsivo o iterativo (looping).

iterativo:

  static String reverseMe(String s) { StringBuilder sb = new StringBuilder(); for(int i = s.length() - 1; i >= 0; --i) sb.append(s.charAt(i)); return sb.toString(); } 

ricorsivamente:

  static String reverseMe(String s) { if(s.length() == 0) return ""; return s.charAt(s.length() - 1) + reverseMe(s.substring(0,s.length()-1)); } 

Questa è la soluzione più semplice:

 System.out.print("egaugnal detatneiro tcejbo si avaj"); 

Bene, la stampa stessa suggerirebbe una funzione predefinita …

Presumibilmente, però, è ansible ottenere i caratteri e concatenarli manualmente al contrario (cioè ricalcarlo al contrario). Naturalmente, si potrebbe dire che la concatenazione è una funzione predefinita … quindi forse lo stesso array di caratteri. Ma ancora … perché ?

La fonte è autorizzata a contenere “egaugnal detatneiro tcejbo si avaj” ;-p

Inoltre, si noti che l’inversione delle stringhe è in realtà piuttosto complessa se si considera unicode che combina caratteri, coppie surrogate, ecc. Si noti l’avvertenza che la maggior parte dei meccanismi di inversione delle stringhe affronterà solo i casi più comuni, ma potrebbe avere problemi con i18n.

Che ne dici di una semplice traversata dalla fine della stringa al punto:

 void printRev(String str) { for(int i=str.length()-1;i>=0;i--) System.out.print(str.charAt(i)); } 
 String reverse(String s) { int legnth = s.length(); char[] arrayCh = s.toCharArray(); for(int i=0; i< length/2; i++) { char ch = s.charAt(i); arrayCh[i] = arrayCh[legnth-1-i]; arrayCh[legnth-1-i] = ch; } return new String(arrayCh); } 
 public class StringReverse { public static void main(String[] args) { String s= (args[0]); for (int i =s.length()-1; i >= 0; i--) { System.out.print(s.charAt(i)); } } } 

Stampa la stringa invertita dell’input.

Prima di tutto: perché reinventare la ruota?

Detto questo: passa dalla lunghezza della stringa a 0 e concatena in un’altra stringa.

 String a="Siva"; for(int i=0;i<=a.length()-1;i++){ System.out.print(a.charAt(i)); } for(int i = a.length() - 1; i >= 0; --i){ System.out.println(a.charAt(i)); } 

Ecco una soluzione ricorsiva che stampa la stringa in ordine inverso. Dovrebbe essere educativo se stai cercando di imparare la ricorsione. Ho anche reso “sbagliato” avendo effettivamente 2 dichiarazioni di print ; uno di loro dovrebbe essere commentato. Cerca di capire quale mentalmente, o semplicemente fai degli esperimenti. Ad ogni modo, impara da esso.

 static void printReverse(String s) { if (!s.isEmpty()) { System.out.print(s.substring(0, 1)); printReverse(s.substring(1)); System.out.print(s.substring(0, 1)); } } 

Punti bonus se rispondi a queste domande:

  • Qual è il suo requisito di stack? È incline allo stack overflow ?
  • È una ricorsione di coda ?
 final String s = "123456789"; final char[] word = s.toCharArray(); final int l = s.length() - 2; final int ll = s.length() - 1; for (int i = 0; i < l; i++) { char x = word[i]; word[i] = word[ll - i]; word[ll - i] = x; } System.out.println(s); System.out.println(new String(word)); 

Puoi farlo in modo ricorsivo o iterativo (looping).

iterativo:

 static String reverseMe(String s) { StringBuilder sb = new StringBuilder(); for (int i = s.length() - 1; i >= 0; --i) sb.append(s.charAt(i)); return sb.toString(); } 

ricorsivamente:

 static String reverseMe(String s) { if (s.length() == 0) return ""; return s.charAt(s.length() - 1) + reverseMe(s.substring(1)); } 

 Integer i = new Integer(15); test(i); System.out.println(i); test(i); System.out.println(i); public static void test (Integer i) { i = (Integer)i + 10; } 
 public class StringReverse { public static void main(String ar[]){ System.out.println(reverseMe("SRINIVAS")); } static String reverseMe(String s){ StringBuffer sb=new StringBuffer(); for(int i=s.length()-1;i>=0;--i){ sb.append(s.charAt(i)); } return sb.toString(); } } 
 private void rev() { String st="hello"; String b=""; for(int i=st.length()-1;i>=0;i--){ b=b+st.charAt(i); } System.out.println("reverse:::"+b); } 

Prova questo:

 public class Test { public static void main(String[] args) { String s = "welcome"; for( int i=0, j = (s.length())-1; i <= j; j-- ) { char c=s.charAt(j); System.out.print(c); } } } 

Ciò che è sorprendente è che la maggior parte delle risposte sono sbagliate! Quando viene utilizzato Unicode. Sembra che nessuno capisca che java usa UTF-16 per la codifica del testo.

Ecco la mia risposta semplice.

 static String reverseMe(String s) { StringBuilder sb = new StringBuilder(); int count = s.codePointCount(0,s.length()); for(int i = count - 1; i >= 0; --i) sb.append(Character.toChars(s.codePointAt(i))); return sb.toString(); } 

questa è la soluzione migliore per questo

 public class String_rev { public static void main(String[] args) { String str="Karan Rajput"; int ln=str.length(); for (int i = ln; i > 0; i--) { System.out.print(str.charAt(i-1)); } } 

}

 public class ReverseString { public static void main(String [] args) { String s = "reverse string" ; String b = ""; for (int i = 0; i < s.length(); i++ ){ b= b + s.substring(s.length()-1-i, s.length()-i); } System.out.println(b); } 
 public static void main(String[] args) { String str = "hello world here I am"; StringTokenizer strToken = new StringTokenizer(str); int token = strToken.countTokens(); String str1 [] = new String[token]; char chr[] = new char[str.length()]; int counter = 0; for(int j=0; j < str.length(); j++) { if(str.charAt(j) != ' ') { chr[j] = str.charAt(j); }else { str1[counter++] = new String(chr).trim(); chr = new char[str.length()]; } } str1[counter++] = new String(chr).trim(); for(int i=str1.length-1; i >= 0 ; i--) { System.out.println(str1[i]); } } 

O / P è: sono qui ciao mondo

Ho avuto questo tempo indietro, e dopo aver risposto con l’ovvia risposta StringBuffer.reverse (), hanno poi chiesto “Si può invertire un array di char senza utilizzare questi metodi API e ottenere il risultato senza spooling in un nuovo array di char?”

All’epoca ho riconosciuto che avevo solo bisogno di iterare più della metà della lunghezza del char array, ma ho fatto un po ‘di hash per spiegare il codice reale che aveva bisogno di entrare (era una domanda verbale). Ad ogni modo, l’ho provato quando sono tornato a casa e ho inventato questo:

 public class StringReverse { public static void main(String[] args){ String a = "String"; char[] aChar = a.toCharArray(); for (int i = (aChar.length-1)/2 ; i >= 0 ; i--){ int posA = i; int posB = (aChar.length-1-i); char tmpA = aChar[posA]; char tmpB = aChar[posB]; System.out.println("Setting " + posA + " to " + tmpB); System.out.println("Setting " + posB + " to " + tmpA); aChar[posA] = tmpB; aChar[posB] = tmpA; } System.out.println(aChar); } } 

Ovviamente puoi ottenerlo con meno codice, ma penso che i compiti temporanei nel metodo rendano più chiaro ciò che sta facendo il codice.

Produce qualcosa come:

 Setting 2 to i Setting 3 to r Setting 1 to n Setting 4 to t Setting 0 to g Setting 5 to S gnirtS 

Più di un’interrogazione piuttosto che una domanda sui compiti, direi.

 public String reverse(String arg) { String tmp = null; if (arg.length() == 1) { return arg; } else { String lastChar = arg.substring(arg.length()-1,arg.length()); String remainingString = arg.substring(0, arg.length() -1); tmp = lastChar + reverse(remainingString); return tmp; } } 
 import java.util.*; public class Restring { public static void main(String[] args) { String input,output; Scanner kbd=new Scanner(System.in); System.out.println("Please Enter a String"); input=kbd.nextLine(); int n=input.length(); char tmp[]=new char[n]; char nxt[]=new char[n]; tmp=input.toCharArray(); int m=0; for(int i=n-1;i>=0;i--) { nxt[m]=tmp[i]; m++; } System.out.print("Reversed String is "); for(int i=0;i 
  public class ReverseWithoutStringAPI { public static void main(String[] args) { String st="hello"; StringBuffer b=new StringBuffer(); for(int i=st.length()-1;i>=0;i--){ b.append(st.charAt(i)); } System.out.println("reverse:::"+b); } } 
 String x = "stack overflow"; String reversed = ""; for(int i = x.length()-1 ; i>=0; i--){ reversed = reversed+ x.charAt(i); } System.out.println("reversed string is : "+ reversed); 

Ecco qui:


 public static void main (String[] args) { System.out.println(reverserString("Akshay")); } private static String reverserString(String src) { char[] sArr = src.toCharArray(); char[] dArr = new char[sArr.length]; for(int i=sArr.length; i>0; i--) { dArr[sArr.length-i] = sArr[i-1]; } return new String(dArr); } 

 public class MyStack { private int maxSize; private char[] stackArray; private int top; public MyStack(int s) { maxSize = s; stackArray = new char[maxSize]; top = -1; } public void push(char j) { stackArray[++top] = j; } public char pop() { return stackArray[top--]; } public char peek() { return stackArray[top]; } public boolean isEmpty() { return (top == -1); } public boolean isFull() { return (top == maxSize - 1); } public static void main(String[] args) { MyStack theStack = new MyStack(10); String s="abcd"; for(int i=0;i 
 public class ReverseString { public static void main(String[] args) { reverseString("HELLO"); } public static String reverseString(String s){ char []arr=s.toCharArray(); for(int i= (arr.length)-1;i>=0;i--){ System.out.print(arr[i]); } String str=String.copyValueOf(arr); return str; } 
 package com.ofs; public class ReverseWordsInString{ public static void main(String[] args) { String str = "welcome to the new world and how are you feeling ?"; // Get the Java runtime Runtime runtime = Runtime.getRuntime(); // Run the garbage collector runtime.gc(); // Calculate the used memory long firstUsageMemory = runtime.totalMemory() - runtime.freeMemory(); System.out.println("Used memory in bytes: " + firstUsageMemory); System.out.println(str); str = new StringBuffer(str).reverse().toString(); int count = 0; int preValue = 0; int lastspaceIndexVal = str.lastIndexOf(" "); int strLen = str.length(); for (int i = 0; i < strLen - 1; i++) { if (Character.isWhitespace(str.charAt(i))) { if (i - preValue == 1 && count == 0) { str = str.substring(0, preValue) + str.charAt(i - 1) + str.substring(i, strLen); preValue = i; count++; } else if (i - preValue == 2 && count == 0) { str = str.substring(0, preValue) + str.charAt(i - 1) + str.charAt(i - 2) + str.substring(i, strLen); preValue = i; count++; } else if (i - preValue == 3 && count == 0) { str = str.substring(0, preValue) + str.charAt(i - 1) + str.charAt(i - 2) + str.charAt(i - 3) + str.substring(i, strLen); preValue = i; count++; } else if (i - preValue == 4 && count == 0) { str = str.substring(0, preValue) + str.charAt(i - 1) + str.charAt(i - 2) + str.charAt(i - 3) + str.charAt(i - 4) + str.substring(i, strLen); preValue = i; count++; } else if (i - preValue == 5 && count == 0) { str = str.substring(0, preValue) + str.charAt(i - 1) + str.substring(i - 2, i - 1) + str.charAt(i - 3) + str.charAt(i - 3) + str.charAt(i - 5) + str.substring(i, strLen); preValue = i; count++; } else if (i - preValue == 6 && count == 0) { str = str.substring(0, preValue) + str.charAt(i - 1) + str.charAt(i - 2) + str.charAt(i - 3) + str.charAt(i - 4) + str.charAt(i - 5) + str.charAt(i - 6) + str.substring(i, strLen); preValue = i; count++; } else if (i - preValue == 7 && count == 0) { str = str.substring(0, preValue) + str.charAt(i - 1) + str.charAt(i - 2) + str.charAt(i - 3) + str.charAt(i - 4) + str.charAt(i - 5) + str.charAt(i - 6) + str.charAt(i - 7) + str.substring(i, strLen); preValue = i; count++; } else if (i - preValue == 8 && count == 0) { str = str.substring(0, preValue) + str.charAt(i - 1) + str.charAt(i - 2) + str.charAt(i - 3) + str.charAt(i - 4) + str.charAt(i - 5) + str.charAt(i - 6) + str.charAt(i - 7) + str.charAt(i - 8) + str.substring(i, strLen); preValue = i; count++; } else if (i - preValue == 2 && count != 0) { str = str.substring(0, preValue) + str.charAt(i - 1) + str.substring(i, strLen); preValue = i; } else if (i - preValue == 3 && count != 0) { str = str.substring(0, preValue + 1) + str.charAt(i - 1) + str.charAt(i - 2) + str.substring(i, strLen); preValue = i; } else if (i - preValue == 4 && count != 0) { str = str.substring(0, preValue + 1) + str.charAt(i - 1) + str.charAt(i - 2) + str.charAt(i - 3) + str.substring(i, strLen); preValue = i; } else if (i - preValue == 5 && count != 0) { str = str.substring(0, preValue + 1) + str.charAt(i - 1) + str.charAt(i - 2) + str.charAt(i - 3) + str.charAt(i - 4) + str.substring(i, strLen); preValue = i; count++; } else if (i - preValue == 6 && count != 0) { str = str.substring(0, preValue + 1) + str.charAt(i - 1) + str.charAt(i - 2) + str.charAt(i - 3) + str.charAt(i - 4) + str.charAt(i - 5) + str.substring(i, strLen); preValue = i; count++; } else if (i - preValue == 7 && count != 0) { str = str.substring(0, preValue + 1) + str.charAt(i - 1) + str.charAt(i - 2) + str.charAt(i - 3) + str.charAt(i - 4) + str.charAt(i - 5) + str.charAt(i - 6) + str.substring(i, strLen); preValue = i; count++; } else if (i - preValue == 8 && count != 0) { str = str.substring(0, preValue + 1) + str.charAt(i - 1) + str.charAt(i - 2) + str.charAt(i - 3) + str.charAt(i - 4) + str.charAt(i - 5) + str.charAt(i - 6) + str.charAt(i - 7) + str.substring(i, strLen); preValue = i; count++; } if (lastspaceIndexVal == preValue) { if (strLen - lastspaceIndexVal == 2 && count != 0) { str = str.substring(0, preValue + 1) + str.charAt(strLen - 1); preValue = i; } else if (strLen - lastspaceIndexVal == 3 && count != 0) { str = str.substring(0, preValue + 1) + str.charAt(strLen - 1) + str.charAt(strLen - 2); preValue = i; } else if (strLen - lastspaceIndexVal == 4 && count != 0) { str = str.substring(0, preValue + 1) + str.charAt(strLen - 1) + str.charAt(strLen - 2) + str.charAt(strLen - 3); preValue = i; count++; } else if (strLen - lastspaceIndexVal == 5 && count != 0) { str = str.substring(0, preValue + 1) + str.charAt(strLen - 1) + str.charAt(strLen - 2) + str.charAt(strLen - 3) + str.charAt(strLen - 4); preValue = i; } else if (strLen - lastspaceIndexVal == 6 && count != 0) { str = str.substring(0, preValue + 1) + str.charAt(strLen - 1) + str.charAt(strLen - 2) + str.charAt(strLen - 3) + str.charAt(strLen - 4) + str.charAt(strLen - 5); preValue = i; count++; } else if (strLen - lastspaceIndexVal == 7 && count != 0) { str = str.substring(0, preValue + 1) + str.charAt(strLen - 1) + str.charAt(strLen - 2) + str.charAt(strLen - 3) + str.charAt(strLen - 4) + str.charAt(strLen - 5) + str.charAt(strLen - 6); preValue = i; } else if (strLen - lastspaceIndexVal == 8 && count != 0) { str = str.substring(0, preValue + 1) + str.charAt(strLen - 1) + str.charAt(strLen - 2) + str.charAt(strLen - 3) + str.charAt(strLen - 4) + str.charAt(strLen - 5) + str.charAt(strLen - 6) + str.charAt(strLen - 7); preValue = i; } } } } runtime.gc(); // Calculate the used memory long SecondaryUsageMemory = runtime.totalMemory() - runtime.freeMemory(); System.out.println("Used memory in bytes: " + SecondaryUsageMemory); System.out.println(str); } } 

ReverseString.java

 public class ReverseString { public static void main(String[] args) { String str = "Ranga Reddy"; String revStr = reverseStr(str); System.out.println(revStr); } // Way1 - Recursive public static String reverseStr(String str) { char arrStr[] = reverseString(0, str.toCharArray()); return new String(arrStr); } private static char[] reverseString(int charIndex, char[] arr) { if (charIndex > arr.length - (charIndex+1)) { return arr; } int startIndex = charIndex; int endIndex = arr.length - (charIndex+1); char temp = arr[startIndex]; arr[startIndex] = arr[endIndex]; arr[endIndex] = temp; charIndex++; return reverseString(charIndex++, arr); } // Way2 private static String strReverse(String str) { char ch[] = new char[str.length()]; for (int i = str.length() - 1, j = 0; i >= 0; i--) { ch[j++] = str.charAt(i); } return new String(ch); } } 

È molto semplice usare il ciclo while

 public class Test { public static void main(String[] args) { String name = "subha chandra"; int len = name.length(); while(len > 0){ len--; char c = name.charAt(len); System.out.print(c); // use String.valueOf(c) to convert char to String } } } 
 import java.util.Scanner; public class StringReverse { public static void main(String[] args) { //Read user Data From Console Scanner sc = new Scanner(System.in); System.out.println("Enter Your String:"); //Take an String so that it can Store the string data String s1 = sc.nextLine(); //split the string and keep in an array String[] s2 = s1.split(" "); String s3 = " "; //reverse the string and placed in an String s3 for (int i = 0; i < s2.length; i++) { for (int j= s2[i].length()-1;j>=0;j--) { s3 += s2[i].charAt(j); }//for s3 += " "; }//for System.out.println("After Reverse: "+s3); }//main }//StringReverse 

Può essere fatto anche in questo modo

 char c[]=str.toCharArray(); int i=c.lenght-1; public void printReverseString(char[] c, int i){ if(i==-1) return; System.out.println(c[i]); printReverseString(c,--i); }