我有一个问题要问你。 因此,我必须使用此要求反转字符串:
然后我试试这个,这是正确的吗?
String str = "Hello World";
System.out.println("Before : "+str);
for(int i=0;i<str.length();i++){
str = new String(str.getBytes(), 1, str.length()-1-i) + new String(str.getBytes(), 0, 1) + new String(str.getBytes(), str.length()-i, i);
System.out.println(str);
}
System.out.println("After : "+str);
输出:
之前:Hello World
ello WorldHllo WorldeH
lo WorldleH
o WorldlleH
WorldolleH
World olleH
orldW olleH
rldoW olleH
ldroW olleH
dlroW olleH
dlroW olleH
之后:dlroW olleH
答案 0 :(得分:2)
您可以使用递归来完成任务,如下所示:
public static String reverse(String source, int from) {
if (source.length()-from == 1) {
return source.charAt(from)+"";
}
return reverse(source, from+1) + source.charAt(from);
}
答案 1 :(得分:1)
String是java中的不可变类,任何似乎修改它的方法总是会返回一个带有修改的新字符串对象。 所以答案是,不,你不能在Java中就地反转String。 Java String是作为char数组的包装器实现的,它对你是隐藏的(即你只能通过常规手段获得这个数组的副本)。
答案 2 :(得分:0)
仅使用:1个变量字符串(用于输入),1个变量char&amp; 1变量int
这意味着,所需的解决方案是:
n
中取出字符,存储到字符变量。m
移至n
(字符串中)。m
。这是“基本”编程语言的典型问题。但是Java不允许这样做,因为它泄漏了根据字符串中的位置设置字符的选项。
虽然这是其他语言中的 no brainer ,但java没有选项可以根据字符串索引设置值。
public static String reverse(String str){
char c;
int i = 0;
for (i=0; i< str.length() / 2; i++){
c = str.charAt(i);
//this would be required to match your requirements.
str[i] = str.charAt(str.length() -1 -i);
str[str.length() -1 -i] = c;
}
return str;
}
但是在java中,你只能这样做:
public static String reverse(String str){
char c;
int i = 0;
for (i=0; i< str.length() / 2; i++){
c = str.charAt(i);
char[] temp = str.toCharArray();
temp[i] = str.charAt(str.length() -1-i);
temp[str.length() -1 -i] = c;
str = new String(temp);
}
return str;
}
创建了额外的char
数组和新的String
对象...即使您可以通过将其声明为for
- 循环来将其降低到一个额外的char数组,它也可以不再符合要求。
我认为设计这个问题的人正在思考“C”或“php”,其中可以对字符串进行基于索引的访问。
如果一个String等于一个char数组(它在一些较旧的语言中,它可能是这个练习的起源),它将如下所示:
public static char[] reverse(char[] str){
char c;
int i = 0;
for (i=0; i< str.length / 2; i++){
c = str[i];
str[i] = str[str.length -1-i];
str[str.length -1 -i] = c;
}
return str;
}
答案 3 :(得分:0)
不使用任何集合,StringBulider,StringBuffer或temp数组反转字符串。简单明快:
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
希望有所帮助:)