You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 00:52:58