Можно ли обратить String
в Java без использования каких-либо временных переменных, таких как String
, Char[]
или StringBuilder
?
Можно использовать только int
или int[]
.
Можно ли обратить String
в Java без использования каких-либо временных переменных, таких как String
, Char[]
или StringBuilder
?
Можно использовать только int
или int[]
.
String reverseMe = "reverse me!";
for (int i = 0; i < reverseMe.length(); i++) {
reverseMe = reverseMe.substring(1, reverseMe.length() - i)
+ reverseMe.substring(0, 1)
+ reverseMe.substring(reverseMe.length() - i, reverseMe.length());
}
System.out.println(reverseMe);
Выход:
!em esrever
Просто для удовольствия, конечно, было бы лучше использовать StringBuffer, здесь я создаю новые строки для каждой итерации, единственная разница в том, что я не ввожу новую ссылку, и у меня есть только счетчик int.
Объекты класса Java String неизменяемы — их содержимое нельзя изменить после создания.
Вам потребуются как минимум два временных объекта — один для конечного результата и один для промежуточных значений — даже если вы найдете способ избежать использования локальной переменной.
РЕДАКТИРОВАТЬ:
Тем не менее, поскольку вы можете использовать int[]
, вы можете смошенничать.
Поскольку char
может быть назначено int
, вы можете использовать String.charAt()
для создания массива int
со значениями символов в обратном порядке. Или вам может быть разрешено использовать String.toCharArray()
для получения массива char
, который будет скопирован во временный int[]
.
Затем вы используете переменную, содержащую ссылку на вашу исходную строку (или переменную результата, если вам это разрешено), чтобы начать с пустой строки (легко получить с помощью прямого присваивания или String.substring()
) и использовать String.concat()
для создания окончательного результата.
Однако ни в коем случае вы не сможете поменять местами символы, как в C/C++.
РЕДАКТИРОВАТЬ 2:
Вот моя версия, которая не использует StringBuffer/Builders внутри:
int r[] = new int[s.length()];
int idx = r.length - 1;
for (int i : s.toCharArray()) {
r[idx--] = i;
}
s = s.substring(0, 0);
for (int i : r) {
s = s.concat(String.valueOf((char)i));
}
Один из многих способов:
String str = "The quick brown fox jumps over the lazy dog";
int len = str.length();
for (int i = (len-1); i >= 0; --i)
str += str.charAt(i);
str = str.substring(len);
System.out.println(str);
String s = "Hello World!";
for(int i = 0; i < s.length(); i++)
{
s = s.substring(1, s.length() - i) + s.charAt(0) + s.substring(s.length() - i);
}
System.out.println(s); // !dlroW olleH
Никаких временных переменных! :)
Поскольку вы можете использовать int, вы можете присвоить int значение char:
String aString = "abc";
int intChar = aString.charAt(0);
Вам нужно будет преобразовать из int обратно в char, чтобы назначить его aString.charAt (2).
Я уверен, что вы можете понять это оттуда.
Сначала добавьте строку к себе в обратном порядке. Затем выньте из него вторую половину.
public class RevString {
public static void main(String[] args) {
String s="string";
for(int i=s.length()-1;i>=0;i--){
s+=s.charAt(i);
}
s=s.substring(s.length()/2, s.length());
System.out.println(s);
}
}
Без использования какой-либо коллекции, StringBulider, StringBuffer или временного массива переворачивают строку. Просто и четко:
public static void main(String[] args) {
String test = "Hello World";
String rev = "";
Pattern p = Pattern.compile("[\\w|\\W]");
Matcher m = p.matcher(test);
while (m.find()) {
rev = m.group()+rev;
}
System.out.println("Reverse==" + rev);
}
Выход
Реверс == dlroW olleH
Надеюсь, поможет :)
String str = "Welcome";
for(int i=0;i<str.length();){
System.out.print(str.charAt(str.length()-1));
str = str.substring(0,str.length()-1);
}
За исключением переменных цикла.
Вы можете использовать класс java.lang.StringBuilder:
String reservedString = new StringBuilder(str).reserve().toString();
int
илиint[]
временным? - person wkl   schedule 30.09.2011