Java 只反转字符串中的字母,并保持单词的顺序相同
我只需要反转字符串中的字母,并使用Java 只反转字符串中的字母,并保持单词的顺序相同,java,Java,我只需要反转字符串中的字母,并使用Character.isleter将符号和数字保留在同一位置,而且我还需要保持反转单词的相同顺序。 我的代码反转字符串并保留符号和数字,但更改单词的顺序,例如: 我的输入字符串: 一个BCD efg!h 我的输出字符串: h1gfe dcb!a 相反,我的输出假定为: d1cba hgf!e 类AnagramsMaker{ 公共静态字符串createAnagram(字符串StringToReverse){ char[]stringToChar=StringToR
Character.isleter将符号和数字保留在同一位置,而且我还需要保持反转单词的相同顺序。
我的代码反转字符串并保留符号和数字,但更改单词的顺序,例如:
我的输入字符串:
一个BCD efg!h
我的输出字符串:
h1gfe dcb!a
相反,我的输出假定为:
d1cba hgf!e
类AnagramsMaker{
公共静态字符串createAnagram(字符串StringToReverse){
char[]stringToChar=StringToReverse.tocharray();
int-arrayStart=0;
int arrayEnd=stringToChar.length-1;
while(arrayStart
按照当前的方式,您实际上根本不需要修改方法,而是可以利用它来反转每个单词,而不是一次反转整个字符串
我将当前方法重命名为public static String createAnagramWord(String StringToReverse)
,然后创建了以下方法:
public static String createAnagram(String str) {
String anagram = "";
String [] arr = str.split(" ");
for (String s : arr) {
anagram += createAnagramWord(s) + " ";
}
return anagram;
}
在这里,我使用您当前的方法,其中包含createAnagramWord
在这个方法中,请注意,我使用“
”在空格中拆分传递给它的字符串
(您也可以使用\\s+
,请参见),然后使用增强的for
循环迭代从拆分
返回的数组
在for
循环的内部,新的字符串
是通过在每个反向单词后面加上空格来创建的
运行示例:
public static void main(String [] args) {
String reverse = "a1bcd efg!h";
System.out.println(createAnagram(reverse));
}
输出:
d1cba hgf!e
注意:
在循环中追加String
在技术上应该利用StringBuilder
,然而,我认为这超出了这个问题的范围,决定省略它
此外,如果出于某种原因您不愿意将此逻辑分为两个单独的方法,则可以将此逻辑重新编写到当前方法中。String plain=“a1bcd efg!h”;
String plain = "a1bcd efg!h";
String reversed = Arrays.stream(plain.split(" ")).map(str -> {
char[] chars = str.toCharArray();
int i = 0;
int j = chars.length - 1;
while(i < j) {
if(Character.isLetter(chars[i]) && Character.isLetter(chars[j])) {
char tmp = chars[i];
chars[i] = chars[j];
chars[j] = tmp;
i++;
j--;
} else if(!Character.isLetter(chars[i]))
i++;
else
j--;
}
return new String(chars);
}).collect(Collectors.joining(" "));
字符串反转=Arrays.stream(plain.split(“”).map(str->{
char[]chars=str.toCharArray();
int i=0;
int j=字符长度-1;
而(i
通过利用java流,您可以更轻松地完成这项工作。
这段代码通过跨过特殊字符并反转i
th和j
th字符(如果它们都是有效字符)的位置来工作。这是python的解决方案。获取字符串开头和结尾的引用,然后检查它是否是字母表,然后增加引用
def reverse_only_letters(string):
l = 0
r = len(string)-1
a = list(string)
while l<r:
if a[l].isalpha() and a[r].isalpha():
temp = a[l]
a[l] = a[r]
a[r] = temp
l += 1
r -= 1
elif not a[l].isalpha():
l += 1
elif not a[r].isalpha():
r -= 1
return "".join(a)
def仅反转字母(字符串):
l=0
r=长度(字符串)-1
a=列表(字符串)
而lStringToReverse
在''
上,则首先处理每个单词。
def reverse_only_letters(string):
l = 0
r = len(string)-1
a = list(string)
while l<r:
if a[l].isalpha() and a[r].isalpha():
temp = a[l]
a[l] = a[r]
a[r] = temp
l += 1
r -= 1
elif not a[l].isalpha():
l += 1
elif not a[r].isalpha():
r -= 1
return "".join(a)