Java中的stringbuilder反向文本
我需要帮助。 我只需要反转文本中的拉丁符号,所有其他符号应保持在同一位置。 但我有一些额外的“结果”。我想这是因为我在String builder中使用了setLength,但我不知道如何修复它
它应该如何工作的示例:
输入:Sra1katr#/ g1gl, pl2
输出:rta1karS#/ l1gg, lp2
这是我的代码:
public static void main(String[] args) {
System.out.println("Enter text for reverse");
Scanner scan = new Scanner(System.in);
String text = scan.nextLine();
String alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
char[] alphabetArray = alphabet.toCharArray();
List<Character> alphabetList = new ArrayList<Character>();
for (char c : alphabetArray) {
alphabetList.add(c);
}
String[] words = text.split(" ");
StringBuilder invertedSentece = new StringBuilder("");
for (String word : words) {
StringBuilder invertedWord = new StringBuilder("");
invertedWord.setLength(word.length());
for (int i = word.length() - 1; i >= 0; i--) {
if (alphabetList.contains(word.charAt(i))) {
int c = word.length() - 1 - i;
invertedWord = invertedWord.insert(c, word.charAt(i));
} else {
invertedWord = invertedWord.deleteCharAt(i);
invertedWord = invertedWord.insert(i, word.charAt(i));
}
}
invertedSentece = invertedSentece.append(invertedWord).append(" ");
}
System.out.println(invertedSentece);
}
# 1 楼答案
我是如何做到的:
# 2 楼答案
输出:
# 3 楼答案
试试这段代码,它能工作,请参阅最后的解释:
输入:afsg%gagthy@sdg美元
输出:gagg%sfagds@yht美元
代码:
说明:
else语句逻辑有问题
让我们以abe#hy为例,在反转移动的字符串时
索引为0时为y h在1个索引处 现在我们将#分配到索引3,当前的反相器DWORD是“yh#”
在下一次迭代中,当我们将另一个字母e推到stringbuilder中时,它只会将所有内容推到右边——“yhe#”
第二点是在StringBuilder中删除索引中的一个字符,然后在所有索引中添加项,除了此索引,结果中仍然会留下空白。为了避免这个问题,我们需要维护一个拉丁字母数的计数器,并使用它来计算其他索引(请参阅deleteIndex变量的使用)
# 4 楼答案
这一行是错误的来源:
在每个单词后面加上
" "
。您不能简单地将其添加到最后一个单词后面:)实现这一点的老技巧是在单词loop之前引入变量
boolean first = true;
,在单词loop的末尾说fitrst = false;
,并在单词loop的开头插入“”,如下所示:此外,使用字母表列表效率极低。通常,一个集合而不是一个列表是显而易见的答案,但是在这种情况下,您可以简单地编写一个静态方法
这是因为char是一种数字类型,Java使用UTF-16作为char、Character和String的内部表示形式
因此,与ASCII相同,与EBCDIC不同,A-Z、A-Z和0-9格式的序列