不使用任何预定义函数打印任何字符串的反转?

如何打印String java is object orientated language的反向java is object orientated language而不使用任何预定义的函数,如reverse()

您可以递归或迭代(循环)执行此操作。

迭代:

  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(); } 

递归:

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

这是最简单的解决方案:

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

那么,打印本身会建议预定义的function……

但是,据推测,您可以获得字符并反向手动连接(即向后循环)。 当然,你可以说连接是一个预定义的函数……所以也许char数组本身。 但又一次…… 为什么

源是否允许包含“egaugnal detatneiro tcejbo si avaj”;-p

另外 – 请注意,如果你考虑将unicode结合起来使用字符,代理对等,那么字符串反转实际上非常复杂。你应该注意到大多数字符串反转机制只会处理更常见的情况,但可能会遇到i18n。

从字符串的结尾到beg的简单遍历怎么样:

 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)); } } } 

打印输入的反转字符串。

首先:为什么重新发明轮子?

话虽这么说:从字符串的长度循环到0并连接到另一个字符串。

 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)); } 

这是一个递归解决方案,只是以相反的顺序打印字符串。 如果你想学习递归,它应该是有教育意义的。 我实际上有两个print语句也让它“错了”; 其中一个应该被注释掉。 试着弄清楚哪些是精神上的,或者只是运行实验。 无论哪种方式,从中学习。

 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)); } } 

如果你回答这些问题,可以获得奖励:

  • 它的堆栈要求是什么? 是否容易堆栈溢出 ?
  • 这是尾递归吗?
 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)); 

您可以递归或迭代(循环)执行此操作。

迭代:

 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(); } 

递归:

 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); } 

尝试这个:

 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); } } } 

令人惊讶的是,大多数答案都是错误的! 使用Unicode时。 似乎没有人理解java使用UTF-16进行文本编码。

这是我的简单回答。

 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(); } 

这是最好的解决方案

 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是:我在这里世界你好

我有一段时间回来了,并回答了明显的StringBuffer.reverse()答案,然后他们问’你可以在不使用这些API方法的情况下反转一个char数组并实现结果而不用假脱机到一个新的char数组吗?’

当时我认识到我只需要迭代char数组的一半长度,但是做了一些散列来解释需要进入它的实际代码(这是一个口头问题)。 无论如何,当我回到家并想出这个时我试过了:

 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); } } 

显然,你可以用更少的代码实现这一点,但我认为方法中的临时赋值可以使代码更清晰。

输出类似于:

 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 

我会说,更多的是面试问题,而不是家庭作业问题。

 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); 

干得好:


 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); } } 

使用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 

它也可以这样做

 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); }