【问题标题】:Short way to convert a string or character to a new one in java在java中将字符串或字符转换为新字符串或字符的快捷方式
【发布时间】:2018-01-09 16:14:06
【问题描述】:

我正在尝试将字符串中的字符转换为新字符。本质上,它将 ATCG 转换为 TAGC。有没有比编写 for 循环并检查每个字符(例如 bash 中的 tr 命令)更短的方法?

【问题讨论】:

  • 提供一个可验证的最小示例来说明您正在做什么,以便我们为您提供帮助。阅读此stackoverflow.com/help/asking
  • 视情况而定,你能定期定义模式吗?
  • 您必须有一个 Map 声明键和值。然后循环或流式传输字符,进行转换,并收集到字符串。对于不清楚tr 是什么的人,请参阅:en.wikipedia.org/wiki/Tr_(Unix)
  • @ElliottFrisch 似乎是 DNA 中的碱基配对。简而言之:是的。将所有'A' 替换为'T'(反之亦然),并将所有'C' 替换为'G'(反之亦然)。 idownvotedbecau.se/noresearch/
  • @Turing85 我认为,它也可以交换每对相邻的字符(在本例中)。

标签: java string bash char tr


【解决方案1】:

@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 以及上面代码中使用的方法的 Javadocs。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-02
    • 2011-03-05
    • 2020-06-03
    • 1970-01-01
    • 2016-04-21
    • 2012-05-24
    • 2023-03-17
    • 2017-09-25
    相关资源
    最近更新 更多