如何将Java字符串转为点形式?及点形式密码还原程序设计咨询
Java字符串转星号形式 + 密码输入原内容展示方案
嘿,我来帮你搞定这两个问题~ 先解决把普通字符串转成星号(也就是你说的“点形式”),再写一个实用的密码输入程序,让输入时显示星号,最后输出真实内容。
一、把字符串转换成星号形式
如果是要把任意字符串变成对应长度的星号串(比如"12345"转成"*****"),有几种简单的实现方式:
方法1:循环拼接(兼容所有Java版本)
public static String strToStars(String original) { // 先判断空值,避免空指针异常 if (original == null || original.isEmpty()) { return ""; } StringBuilder starBuilder = new StringBuilder(); for (int i = 0; i < original.length(); i++) { starBuilder.append('*'); } return starBuilder.toString(); }
方法2:Java 11+ 极简写法
用String.repeat()方法一行搞定,代码更简洁:
public static String strToStars(String original) { return original == null ? "" : "*".repeat(original.length()); }
测试效果:
public static void main(String[] args) { String testStr = "12345"; System.out.println(strToStars(testStr)); // 输出:***** }
二、实现密码输入时显示星号,输出原内容
普通的Scanner输入会直接显示你敲的字符,所以我们要用Java的Console类来实现“输入时显示星号,后台获取真实内容”的效果,这也是实际项目中处理密码输入的常用方式。
完整程序示例
import java.io.Console; import java.util.Arrays; public class PasswordInputDemo { public static void main(String[] args) { // 获取控制台对象,注意:IDE的运行窗口可能不支持,建议在命令行运行 Console console = System.console(); if (console == null) { System.out.println("⚠️ 无法获取控制台,请在命令行环境运行此程序(IDE的Run窗口可能不支持)"); System.exit(1); } // 提示用户输入,输入时会自动显示星号 char[] passwordChars = console.readPassword("请输入密码:"); // 把字符数组转成字符串(字符数组比字符串更安全,用完可以清空) String originalPassword = new String(passwordChars); // 输出真实内容 System.out.println("您输入的原密码是:" + originalPassword); // 安全起见,用完后清空字符数组,避免密码留在内存中 Arrays.fill(passwordChars, ' '); } }
运行说明
- 如果你用IDE运行可能会报错(因为IDE的控制台不是系统原生控制台),建议用命令行操作:
- 编译:
javac PasswordInputDemo.java - 运行:
java PasswordInputDemo
- 编译:
- 输入密码时,屏幕会显示星号,程序拿到的却是你实际输入的内容,最后会输出真实密码。
补充:如果是“输入星号串映射原内容”
如果你的需求是输入星号字符串,比如*****,程序输出对应的原内容12345,那需要提前建立映射关系,比如用Map存储,但这种场景实用性不高(相同长度的星号会对应同一个内容),示例代码如下:
import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class StarToOriginal { public static void main(String[] args) { // 提前定义星号串和原内容的映射 Map<String, String> starMap = new HashMap<>(); starMap.put("*****", "12345"); starMap.put("******", "abc123"); Scanner scanner = new Scanner(System.in); System.out.println("请输入星号形式的密码:"); String inputStar = scanner.nextLine().trim(); String original = starMap.get(inputStar); if (original != null) { System.out.println("对应的原内容是:" + original); } else { System.out.println("没有找到匹配的原内容"); } } }
内容的提问来源于stack exchange,提问作者user9836598
相关产品推荐
相关产品推荐

