Java实现单词前半部分移至末尾的字符串移位功能求助
问题描述
我是编程新手,做作业时遇到了麻烦。作业要求从文件读取字符串,并按以下规则做字符移位:
- 若单词长度n为奇数,把前
(n+1)/2个字符移到单词末尾,比如‘kitchen’变成‘henkitc’; - 若单词长度n为偶数,把前
n/2个字符移到单词末尾,比如‘before’变成‘orebef’。
输入文件示例
Before
Kitchen
输出文件示例
Before OREBEF
Kitchen HENKITC
以下是我目前写的代码,请求帮忙完善功能:
public static void main(String[] args) throws IOException { Scanner input; FileInputStream inputFile = null; FileOutputStream outputFile = null; PrintWriter outPrint = null; inputFile = new FileInputStream("input2.in"); outputFile = new FileOutputStream("results.out.txt"); outPrint = new PrintWriter(outputFile); input = new Scanner(inputFile); while (input.hasNext()) { String lineReader = null; lineReader = input.nextLine(); if (lineReader.length() % 2 == 0) { String evenWord = lineReader; String flippedEvenWord = null; System.out.print(evenWord); System.out.print(" "); System.out.println(evenWord.toUpperCase()); outPrint.print(evenWord); outPrint.print(" "); outPrint.println(evenWord.toUpperCase()); } else if (lineReader.length() % 2 != 0){ String oddWord = lineReader; System.out.print(oddWord); outPrint.print(oddWord); outPrint.print(" "); System.out.print(" "); String flippedOddWord = oddWord; System.out.println(flippedOddWord.toUpperCase()); outPrint.println(oddWord.toUpperCase()); } else { break; } } inputFile.close(); outPrint.close(); input.close(); } }
解决方案
你当前的代码没有实现核心的字符移位逻辑,只是直接输出了原单词的大写形式。下面是修正后的代码,已经实现了要求的移位规则:
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter; import java.util.Scanner; public class StringShift { public static void main(String[] args) throws IOException { Scanner input; FileInputStream inputFile = null; FileOutputStream outputFile = null; PrintWriter outPrint = null; try { inputFile = new FileInputStream("input2.in"); outputFile = new FileOutputStream("results.out.txt"); outPrint = new PrintWriter(outputFile); input = new Scanner(inputFile); while (input.hasNextLine()) { String lineReader = input.nextLine().trim(); if (lineReader.isEmpty()) { continue; } int length = lineReader.length(); String shiftedWord; if (length % 2 == 0) { int splitIndex = length / 2; shiftedWord = lineReader.substring(splitIndex) + lineReader.substring(0, splitIndex); } else { int splitIndex = (length + 1) / 2; shiftedWord = lineReader.substring(splitIndex) + lineReader.substring(0, splitIndex); } shiftedWord = shiftedWord.toUpperCase(); System.out.printf("%s %s%n", lineReader, shiftedWord); outPrint.printf("%s %s%n", lineReader, shiftedWord); } } finally { if (inputFile != null) { inputFile.close(); } if (outPrint != null) { outPrint.close(); } if (input != null) { input.close(); } } } }
关键修改说明
- 实现了字符移位逻辑:根据单词长度的奇偶性计算分割索引,用
substring方法拆分字符串,拼接后半部分和前半部分后转大写。 - 修正输入读取逻辑:用
hasNextLine()替代hasNext(),更适配每行一个单词的场景,同时增加了空白行跳过处理。 - 统一输出格式:和示例要求一致,原单词后紧跟移位后的大写单词,控制台与文件输出格式对齐。
- 优化资源管理:用
try-finally确保流资源被正确关闭,避免资源泄漏。
内容的提问来源于stack exchange,提问作者vert4848
相关产品推荐
相关产品推荐

