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

时间:2010-04-10 10:13:54

标签: java string reverse

如何在不使用java is object orientated language等任何预定义函数的情况下打印字符串reverse()的反向?

34 个答案:

答案 0 :(得分:57)

这是最简单的解决方案:

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

答案 1 :(得分:48)

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

迭代:

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

答案 2 :(得分:8)

好吧,打印本身会建议预定义的功能......

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

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

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

答案 3 :(得分:7)

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

答案 4 :(得分:6)

从字符串末尾到beg的简单遍历如何:

void printRev(String str) {
 for(int i=str.length()-1;i>=0;i--)
  System.out.print(str.charAt(i));
}

答案 5 :(得分:3)

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

答案 6 :(得分:3)

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

话虽如此:从字符串的长度循环到0并连接成另一个字符串。

答案 7 :(得分:3)

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

打印输入的反转字符串。

答案 8 :(得分:1)

这是此

的最佳解决方案
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));
    }
}

}

答案 9 :(得分:1)

令人惊讶的是,大多数答案都是错误的!使用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();
 }

答案 10 :(得分:1)

试试这个:

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

答案 11 :(得分:1)

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

答案 12 :(得分:1)

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

答案 13 :(得分:1)

答案 14 :(得分:1)

这是一个递归解决方案,只是以相反的顺序打印字符串。如果你想学习递归,它应该是有教育意义的。我实际上有两个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));
    }
}

如果你回答这些问题,可以获得积分:

答案 15 :(得分:0)

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

答案 16 :(得分:0)

也可以这样做

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

答案 17 :(得分:0)

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

答案 18 :(得分:0)

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

答案 19 :(得分:0)

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

答案 20 :(得分:0)

代码如下:

   public class A{
       public static void main(String args[]){

      String str="hello";
      for(int i=str.length()-1;i>=0;i--){
        String str1=str.charAt(i);
        system.out.print(str1);
      }

   }
}

答案 21 :(得分:0)

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

答案 22 :(得分:0)

你可以这样尝试使用for循环直到字符串的倒数第二个字符串迭代它然后简单地反转你的循环如下:

public class StringReverse {
    public static void main(String ar[]){
        System.out.println(reverseMe("iniana"));
    }
    static String reverseMe(String s){
       String reverse = "";
       for(int i = s.length()-1; i>=0; i--){
           resverse = reverse + s.charAt(i);
       }
       return reverse;
    }
}

答案 23 :(得分:0)

代码如下:

public class RemoveString {

public static void main(String[] args) {

Scanner scanner=new Scanner(System.in);

String s=scanner.next();

String st="";

for(int i=s.length()-1;i>=0;i--){

st=st+s.charAt(i);


}

System.out.println(st);

}

}

答案 24 :(得分:0)

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<s.length();i++)
      theStack.push(s.charAt(i));
      for(int i=0;i<s.length();i++)
      System.out.println(theStack.pop());

    }

答案 25 :(得分:0)

你走了:

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

答案 26 :(得分:0)

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

答案 27 :(得分:0)

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

答案 28 :(得分:0)

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

答案 29 :(得分:0)

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;


    }
}

答案 30 :(得分:0)

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<n;i++)
  {
      System.out.print(nxt[i]);
  }

}

答案 31 :(得分:0)

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

答案 32 :(得分:0)

我有一段时间了,并且回答了明显的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

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

答案 33 :(得分:-1)

public class Match {
 void comp(String s1, String s2) {
    char[] charArray1 = s1.toCharArray();
    char[] charArray2 = s2.toCharArray();

    int length1 = charArray1.length;        

    int length2 = charArray2.length;       
    int flag = 0;

    if (length1 == length2) {
        for (int i = 0; i <= length1 - 1; i++) {
            if (charArray1[i] == charArray2[i]) {
                System.out.println("index are matched:" + " " + charArray1[i] + " " + "in index-" + i);

            } else {
                flag = 1;
                System.out.println("index are not matched:" + " " + charArray1[i] + " " + "in index-" + i);
                System.out.println("index are not matched:" + " " + charArray2[i] + " " + "in index-" + i);                    
            }
        }
    } else {
        System.out.println("Your string are not matched by length");
    }
    if (flag == 0) {
        System.out.println("Your string  matched with other String");
    } else {
        System.out.println("Your string are not matched");
    }
}
public static void main(String[] args) {
    java.util.Scanner sc = new java.util.Scanner(System.in);
    System.out.println("Enter the 1st String:");
    String s1 = sc.nextLine();
    System.out.println("Enter the 2nd string");
    String s2 = sc.nextLine();
    Match m = new Match();
    m.comp(s1, s2);
}
}