如何用substring与Scanner实现Java单词反转?遇参数使用难题
问题描述
需要实现输入单词的反转(例如将java转为avaj),要求使用substring()方法和Scanner输入,但对substring()的用法不熟悉——比如使用word.substring(6,3)会因起始索引大于结束索引报错。目前已完成输入校验代码,卡在如何用substring()实现字符串反转。
现有代码:
import java.util.Scanner; class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); String word, wordTwo; System.out.println("enter a word"); while (true) { word = input.next(); if(word.matches(".*[0-9].*")){ System.out.println("Please enter a valid word!"); continue; } break; } String a = word.substring(); System.out.println(a); input.close(); } }
解决方案
先明确substring()的正确用法
substring(int beginIndex):从索引beginIndex(包含)开始截取到字符串末尾,返回新的子串substring(int beginIndex, int endIndex):截取从beginIndex(包含)到endIndex(不包含)之间的字符,必须保证beginIndex <= endIndex,否则会抛出索引越界异常
用substring()实现字符串反转的思路
从原字符串的最后一个字符开始,逐个截取单个字符并拼接到结果字符串中,最终得到反转后的内容。
修改后的完整代码
import java.util.Scanner; class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); String word; System.out.println("enter a word"); // 输入校验:确保输入不含数字 while (true) { word = input.next(); if(word.matches(".*[0-9].*")){ System.out.println("Please enter a valid word!"); continue; } break; } // 实现字符串反转 String reversedWord = ""; int wordLength = word.length(); // 从最后一个索引开始循环到0 for (int i = wordLength - 1; i >= 0; i--) { // 截取当前索引到i+1的子串(即单个字符),拼接到结果中 reversedWord += word.substring(i, i + 1); } // 输出反转后的单词 System.out.println(reversedWord); input.close(); } }
代码说明
- 先通过循环完成输入校验,确保输入的单词不含数字
- 初始化空字符串
reversedWord用于存储反转结果 - 获取原单词的长度
wordLength,字符串索引从0开始,所以最后一个字符的索引是wordLength - 1 - 从最后一个索引倒序循环到0,每次用
substring(i, i+1)截取单个字符(因为substring的结束索引不包含,所以i到i+1刚好是当前索引的字符) - 将每次截取的字符拼接到
reversedWord中,循环结束后得到反转后的字符串
内容的提问来源于stack exchange,提问作者Game Destroyer
相关产品推荐
相关产品推荐

