Как я могу получить тот же результат оператора "tr ///" из Perl в Java - PullRequest
1 голос
/ 24 сентября 2011

Какой самый быстрый способ реализовать оператор Perl tr///?

Например, если бы у меня была строка "ATGCATGC" и я использовал бы perl tr/GTCA/CAGT/, я бы получил "TACGTACG".

Есть ли одна функция Java, которая делает это?

Ответы [ 4 ]

2 голосов
/ 24 сентября 2011

Нет способа сделать это, используя стандартную Java. Однако существует библиотека apache commons-lang метод StringUtils.replaceChars (String str, String searchChars, String replaceChars)

Использовать так:

import org.apache.commons.lang.StringUtils;

StringUtils.replaceChars("ATGCATGC", "GTCA", "CAGT"); // "TACGTACG"

Удачи в ваших исследованиях генетики:)

1 голос
/ 24 сентября 2011

Как прокомментировали другие, Apache Commons StringUtils сделает это за вас.Так будет и этот метод:

    public static String replaceChars(final String str, final String sourceChars, final String replaceChars) {

    int ix;
    final StringBuilder sb = new StringBuilder(str);
    for (int i = 0 ; i < sb.length() ; i++) {
        if ((ix = sourceChars.indexOf(sb.charAt(i))) != -1) {
            sb.replace(i, i + 1, replaceChars.substring(ix, ix + 1));
        }
    }

    return sb.toString();
}
0 голосов
/ 24 сентября 2011

В Java нет встроенной функции для этого.Реально основной функцией, состоящей в том, чтобы просто заменять каждый символ одного символа на другой, будет:

public static String transliterate(String str, String source, String target) {
    StringBuilder builder = new StringBuilder();
    for(int i = 0; i < str.length(); i++) {
        char ch = str.charAt(i);
        int j = -1;
        for(int k = 0; k < source.length(); k++) {
            if(source.charAt(k) == ch) {
                j = k;
                break;
            }
        }
        if(j > -1 && j < target.length()) {
            builder.append(target.charAt(j));
        } else {
            builder.append(ch);
        }
    }
    return builder.toString();
}

public static void main(String[] args) {
     System.out.println(transliterate("ABCDDCBDA", "ABCD", "1234"));
}
0 голосов
/ 24 сентября 2011

Вы начинаете с

perldoc -f tr

, который говорит:

The transliteration operator...

Теперь, когда вы знаете хороший поисковый запрос, введите:

java transliteration

в маленькоеbox на google.com.

Этот первый хит выглядит интересно:

jtr, a transliteration library for Java
jtr.sourceforge.net
jtr is a small Java library that emulates the 
Perl 5 "transliterate" operation on a given string. 
Most Perl 5 features are supported, including all the standard ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...