Java入门求助:如何在Main类中整合文本扫描与十六进制加密类
解决Java文本转十六进制加密器的整合问题
嘿,作为Java入门新手,你已经把模块拆分得很清楚啦!现在咱们来把这三个类好好整合起来,顺便修复几个小细节,让你的加密器正常工作~
先说说原代码里的小坑
textScanner里的scanA.next()只能读取空格前的内容,输入goodmorning stackoverflow的话只能拿到goodmorning,得换成scanA.nextLine()才能读取整行输入。encryptor里的toHexadecimal方法不该直接调用textScanner.scanner(),咱们要让每个类的职责更清晰:scanner负责拿输入,encryptor负责转换,Main负责统筹调用。- 原
DatatypeConverter.printHexBinary()返回的是连续的十六进制字符串(比如676F6F64),咱们得把它拆成每个字节带空格的格式,才能匹配你要的输出。
修改后的完整代码
1. textScanner.java
import java.util.Scanner; public class textScanner { // 只负责读取控制台输入,职责单一 public static String getInputText() { Scanner scanA = new Scanner(System.in); System.out.println("Please enter the text to be encrypted"); String plainText = scanA.nextLine(); // 换成nextLine读取整行内容 scanA.close(); return plainText; } }
2. encryptor.java
import java.io.UnsupportedEncodingException; import javax.xml.bind.DatatypeConverter; public class encryptor { // 专注于文本转十六进制的逻辑,接收字符串返回格式化后的结果 public static String toHexadecimal(String text) throws UnsupportedEncodingException { byte[] myBytes = text.getBytes("UTF-8"); // 先转成连续的十六进制字符串 String hexStr = DatatypeConverter.printHexBinary(myBytes); // 拆分为每两位一组,加空格分隔并转小写(匹配你的输出示例) return hexStr.replaceAll("(.{2})", "$1 ").trim().toLowerCase(); } }
3. Main.java
import java.io.UnsupportedEncodingException; public class Main { public static void main(String[] args) { try { // 第一步:获取用户输入 String inputText = textScanner.getInputText(); // 第二步:调用加密器转换文本 String encryptedHex = encryptor.toHexadecimal(inputText); // 第三步:输出最终结果 System.out.println(encryptedHex); } catch (UnsupportedEncodingException e) { // 捕获编码异常,给友好提示 System.out.println("编码错误:" + e.getMessage()); } } }
运行效果
输入:goodmorning stackoverflow
输出:67 6f 6f 64 6d 6f 72 6e 69 6e 67 20 73 74 61 63 6b 6f 76 65 72 66 6c 6f 77
整合逻辑说明
- Main类作为程序入口,先调用
textScanner.getInputText()拿到用户输入的完整文本。 - 把输入文本传给
encryptor.toHexadecimal(),让它完成字节转换、十六进制格式化的工作。 - 最后输出处理后的结果,同时用
try-catch捕获可能的编码异常,让程序更健壮。
内容的提问来源于stack exchange,提问作者evan
相关产品推荐
相关产品推荐

