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

Как напечатать обратную строку String java is object orientated language без использования какой-либо предопределенной функции, такой как reverse() ?

30 Solutions collect form web for “Печать реверса любой строки без использования какой-либо предопределенной функции?”

Вы можете сделать это либо рекурсивно, либо итеративно (цикл).

Итеративно:

  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); } 
  • Токенизация строк в C
  • Как обрезать пробелы из переменной Bash?
  • C #, чтобы проверить, является ли строка целым числом?
  • Как избавиться от `устаревшего преобразования из строковой константы в 'char *' 'предупреждения в GCC?
  • C ++: Может ли макрос расширять «abc» на «a», «b», «c»?
  • std :: string to char *
  • Почему byteArray имеет длину 22 вместо 20?
  • Строка заменит обратную косую черту
  • Считать слова в строковом методе?
  • Неявное преобразование из char ** в const char **
  • Исключить строку для шаблона замены sed
  • Interesting Posts

    Положение Солнца с учетом времени суток, широты и долготы

    Как обернуть длинный текст в прядильщик

    Как отключить сенсорную панель нетбука при подключении мыши USB

    Корректная переменная капитализации сценария Bash и оболочки

    Уже есть открытый DataReader, связанный с этой Командой, который должен быть закрыт первым

    как преобразовать формат String в формат даты в JAVA?

    Метеор: отладка на стороне сервера

    Как загрузить файлы из командной строки в Windows, например, Wget?

    Настройка виртуального ПК (виртуального окна) в качестве веб-сервера

    Удалить символы после определенного символа в строке, а затем удалить подстроку?

    Печать дополнительной переменной

    Как работает String.Index в Swift

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

    Состав функции Haskell (.) И функциональное приложение ($) идиомы: правильное использование

    Как обновить переменные среды оболочки cygwin, установленные в окне «Свойства системы»

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