个人认为这样子易理解一点
字符串加密
https://www.nowcoder.com/practice/e4af1fe682b54459b2a211df91a91cf3
import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.Scanner; public class Main { public static void main(String args[]) { Scanner sc = new Scanner(System.in); String key = sc.next(); String data = sc.next(); LinkedHashSet<Character> linkedHashSet = new LinkedHashSet<>(26); for (char c : key.toCharArray()) { // 使用set集合去重 linkedHashSet.add(c); } ArrayList<Character> list = new ArrayList<>(linkedHashSet); // 将剩下的字母进行追加 for (int i = (int) 'A'; i <= (int) 'Z'; i++) { if (!list.contains((char) i) && !list.contains(Character.toLowerCase((char) i))) { // 大小写都未出现,追加 list.add((char) i); } } StringBuilder builder = new StringBuilder(data.length()); for (char c : data.toCharArray()) { if (c >= 'A' && c <= 'Z'){ // 找到该字符对应的26位字母表的索引,我们生成新的字母表与原有a~z字母表是对应的 int index = c - 65; // 注意大小写与原有的一致 builder.append(Character.toUpperCase(list.get(index))); } if (c >= 'a' && c <= 'z'){ int index = c - 97; builder.append(Character.toLowerCase(list.get(index))); } } System.out.println(builder); } }