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=列表(字符串)
而l
StringToReverse
''
上,则首先处理每个单词。
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)