6

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

4

34 回答 34

57

这是最简单的解决方案:

System.out.print("egaugnal detatneiro tcejbo si avaj");
于 2010-04-10T12:52:37.397 回答
50

您可以递归或迭代(循环)进行。

迭代地:

 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));
 }
于 2010-04-10T10:17:42.567 回答
8

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

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

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

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

于 2010-04-10T10:18:12.240 回答
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);
}
于 2012-05-04T11:12:22.900 回答
6

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

void printRev(String str) {
 for(int i=str.length()-1;i>=0;i--)
  System.out.print(str.charAt(i));
}
于 2010-04-10T10:20:15.790 回答
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)); 
}
于 2011-05-18T06:05:39.323 回答
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));    
        }
    } 
}

打印输入的反转字符串。

于 2013-02-15T19:00:24.393 回答
3

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

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

于 2010-04-10T10:16:08.343 回答
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);
}
于 2012-08-02T14:58:17.393 回答
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;
}
于 2010-07-24T13:06:49.070 回答
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();
 }
于 2013-08-16T06:38:13.950 回答
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));
    }
}

如果您回答以下问题,将获得奖励积分:

于 2010-04-10T15:23:14.440 回答
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();
    }
}
于 2012-07-28T20:46:30.943 回答
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));
    }
}

}

于 2014-07-23T04:14:44.050 回答
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);
    }
    }
}
于 2013-08-16T06:05:54.897 回答
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);
于 2013-04-05T13:53:21.900 回答
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]);
  }

}
于 2013-01-16T03:29:39.443 回答
0

Code will be as below:

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

   }
}
于 2015-02-16T14:11:09.167 回答
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 是:我在这里吗,世界你好

于 2013-04-10T16:26:06.277 回答
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);
}
}
于 2015-04-27T13:20:49.327 回答
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;
}
于 2015-01-31T03:43:50.447 回答
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

我会说,这更像是一个面试问题而不是家庭作业问题。

于 2011-11-02T10:36:48.530 回答
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);

}

}
于 2014-06-25T17:07:52.470 回答
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);
}
}
于 2013-07-09T06:02:39.503 回答
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;


    }
}
于 2013-02-28T09:57:00.373 回答
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);
}

于 2014-04-29T14:13:12.793 回答
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);
}
于 2012-04-13T11:27:07.563 回答
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());

    }
于 2014-06-18T12:01:27.057 回答
0

反向字符串.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);
    }
}
于 2015-05-15T03:36:40.107 回答
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
    }
}    
}
于 2015-06-23T09:45:51.300 回答
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;
    }
}
于 2018-05-28T12:42:19.700 回答
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);
   }   
于 2015-12-10T13:13:36.207 回答
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
于 2015-10-01T16:14:14.067 回答
-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);
}
}
于 2015-03-31T13:11:44.193 回答