Печать реверса любой строки без использования какой-либо предопределенной функции?

Как напечатать обратную строку String 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"); 

Ну, сама печать предложит предопределенную функцию …

Предположительно, однако, вы могли бы получить символы и конкатенировать их вручную в обратном направлении (т. Е. Перевернуть его назад). Конечно, вы могли бы сказать, что конкатенация является предопределенной функцией … так что, возможно, сам массив char. Но опять … почему ?

Позволяет ли источник содержать «egaugnal detatneiro tcejbo si avaj» ;-p

Также – обратите внимание, что разворот строк на самом деле довольно сложный, если вы рассматриваете уникод, объединяющий символы, суррогатные пары и т. Д. Следует отметить, что большинство механизмов разворота строк будут иметь дело только с более распространенными случаями, но могут работать с i18n.

Как насчет простой траверсы от конца строки до начала:

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

Распечатывает обратную строку ввода.

Прежде всего: зачем изобретать колесо?

Это сказано: Loop от длины строки до 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)); } 

Вот рекурсивное решение, которое просто печатает строку в обратном порядке. Это должно быть образовательным, если вы пытаетесь изучить рекурсию. Я также сделал это «неправильно», фактически имея 2 заявления 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)); } } 

Бонусные баллы, если вы ответите на эти вопросы:

  • Какова его потребность в стеке? Является ли оно склонным к переполнению стека ?
  • Это хвостовая recursion ?
 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 и добиться результата без буферизации в новый массив символов?»

В то время я узнал, что мне нужно только перебирать половину длины массива символов, но сделал немного хеша, объяснив фактический код, который должен был войти в него (это был устный вопрос). Во всяком случае, я попробовал, когда вернулся домой и придумал это:

 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); } 
  • Почему метод concat () Java не делает ничего?
  • Использование scanf с помощью NSStrings
  • Java String удаляет все нецифровые символы
  • Символы в строке изменились после загрузки HTML из Интернета
  • Есть ли функция для разделения строки в PL / SQL?
  • Вставьте символ в строку в определенном месте
  • Использование локалей с Java toLowerCase () и toUpperCase ()
  • Java: Является ли assertEquals (String, String) надежным?
  • Строка заменит обратную косую черту
  • intern () ведет себя по-разному в Java 6 и Java 7
  • Как прочитать весь файл в строке с помощью C #?
  • Interesting Posts

    Как настроить QoS на домашнем маршрутизаторе

    Файлы Zipping более 2 ГБ в оболочке bash

    Почему .NET использует округление банкира по умолчанию?

    Почему «десятичный» не является допустимым типом параметра атрибута?

    Что означает эта ошибка GCC «… усечение, усеченное, чтобы соответствовать …»?

    Какой код пользовательского формата отображал бы проценты, как если бы он был несколько на 1000

    Более эффективный способ для цикла паузы

    Как повысить привилегии только в случае необходимости?

    Файл Makefile с несколькими исполняемыми файлами

    Есть ли способ читать почту Hotmail с Thunderbird без использования подключаемого модуля WebMail?

    Сообщение LogCat: Ресурсы служб Google Play не найдены. Проверьте конфигурацию проекта, чтобы убедиться, что ресурсы включены.

    Можно ли загрузить всю папку с помощью FTP?

    добавить параметры jvm в tomcat

    Список readonly с частным набором

    Как перечислить все функции в модуле Python?

    Давайте будем гением компьютера.