跳转到主内容
极星编程网:以代码为星,赴技术山海!

Java 字符串循环移位教程:按奇偶长度分割并前置后半部分

本文详解如何在 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 不包含)。以下是实现该逻辑的核心代码段:
// 假设 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());
✅ 关键细节说明 : 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 语法提升健壮性(见进阶提示)。 进阶建议(生产环境推荐) : 为避免资源泄漏与异常中断导致的关闭失败,应改用自动资源管理:
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()); }
掌握此类基于索引的字符串操作,不仅有助于完成课程作业,更是理解 Java 字符串不可变性、内存模型及算法思维的重要实践。务必通过小样例(如 "a"、"ab"、"abc")手动推演索引边界,以彻底内化逻辑。 立即学习 “ Java免费学习笔记(深入) ”;

相关文章