本文详解如何在 java 中根据单词长度的奇偶性,将前半部分字符移动到末尾,实现指定格式的字符串循环移位,并提供完整可运行代码与关键注意事项。
本文详解如何在
java
中根据单词长度的奇偶性,将前半部分字符移动到末尾,实现指定格式的字符串循环移位,并提供完整可运行代码与关键注意事项。
在自然语言处理或基础编程练习中,常需对字符串执行特定规则的重排操作。本教程聚焦一个典型任务:对输入单词按其长度奇偶性进行“前半截后移”式循环移位——即不改变字符本身,仅调整顺序。核心逻辑简洁而富有教学意义:若单词长度 $ n $ 为偶数,取前 $ n/2 $ 个字符移至末尾;若 $ n $ 为奇数,则取前 $ (n+1)/2 $ 个字符后移。例如 "before"(6 字符,偶)→ "orebef";"kitchen"(7 字符,奇)→ "henkitc"。
该操作本质是字符串切片(substring)与拼接(concatenation)的组合应用。Java 的 String.substring(int beginIndex, int endIndex) 方法是关键工具,需特别注意其
左闭右开
特性(endIndex 不包含)。以下是实现该逻辑的核心代码段:
✅
关键细节说明
:
Eclipse导入Android或其他的JAVA项目的正确方法 WORD版
本文档主要讲述的是Eclipse导入Android或其他的JAVA项目的正确方法;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
下载
对于奇数长度(如 "kitchen".length() == 7),(7+1)/2 == 4,substring(4) 得 "hen",substring(0,4) 得 "kitc",拼接为 "henkitc";
所有输出均需保留原始大小写输入(如 "Before"),但移位结果统一转为大写(.toUpperCase());
注意空行或空白字符处理:input.nextLine() 可能读入空字符串,建议在实际项目中增加 lineReader != null && !lineReader.trim().isEmpty() 校验;
资源管理务必严谨:FileInputStream 和 PrintWriter 需显式 close(),或更推荐使用 try-with-resources 语法提升健壮性(见进阶提示)。
进阶建议(生产环境推荐)
:
为避免资源泄漏与异常中断导致的关闭失败,应改用自动资源管理:
掌握此类基于索引的字符串操作,不仅有助于完成课程作业,更是理解 Java 字符串不可变性、内存模型及算法思维的重要实践。务必通过小样例(如 "a"、"ab"、"abc")手动推演索引边界,以彻底内化逻辑。
立即学习
“
Java免费学习笔记(深入)
”;
// 假设 lineReader 为当前读入的单词(如 "Before" 或 "Kitchen")
int len = lineReader.length();
String shiftedWord;
if (len % 2 == 0) {
// 偶数长度:分割点为 len/2
int mid = len / 2;
shiftedWord = lineReader.substring(mid) + lineReader.substring(0, mid);
} else {
// 奇数长度:分割点为 (len + 1) / 2(向上取整的中位索引)
int mid = (len + 1) / 2;
shiftedWord = lineReader.substring(mid) + lineReader.substring(0, mid);
}
// 输出格式要求:原词 + 空格 + 移位后大写结果(如 "Before OREBEF")
System.out.println(lineReader + " " + shiftedWord.toUpperCase());
outPrint.println(lineReader + " " + shiftedWord.toUpperCase());try (FileInputStream inputFile = new FileInputStream("input2.in");
PrintWriter outPrint = new PrintWriter(new FileOutputStream("results.out.txt"));
Scanner input = new Scanner(inputFile)) {
while (input.hasNextLine()) {
String lineReader = input.nextLine().trim();
if (lineReader.isEmpty()) continue; // 跳过空行
// ... 移位逻辑同上 ...
}
} catch (IOException e) {
System.err.println("文件处理异常: " + e.getMessage());
}