我正在尝试将字符串中的字符转换为新字符。基本上它会将ATCG转换为TAGC。有没有比编写for循环和检查每个字符(例如bash中的tr命令)更短的方法?
答案 0 :(得分:0)
@ ifly6的评论已经勾勒出了前进的方向:
Map
定义单个字符的转化规则
String
转换是通过流式处理字符来完成的,
为每个角色进行转换(使用Map
),
并将它们收集到String
。
public class Main {
private static Map<Character, Character> charMap = new HashMap<>();
static {
charMap.put('A', 'T');
charMap.put('T', 'A');
charMap.put('C', 'G');
charMap.put('G', 'C');
}
public static String transform(String s) {
return s.chars() // IntStream
.mapToObj(c -> charMap.get((char) c)) // Stream<Character>
.map(Object::toString) // Stream<String>
.collect(Collectors.joining()); // String
}
public static void main(String[] args) {
System.out.println(transform("ATTCGAGC")); // prints "TAAGCTCG"
}
}
你会注意到(至少对于新手来说)流更难
理解比传统的for
循环。
我建议阅读Java 8 streams 以及上面代码中使用的方法的Javadoc。