All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.repseq.util.StringWithMapping Maven / Gradle / Ivy

package io.repseq.util;

public class StringWithMapping {
    private final int[] originalToModifiedMapping;
    private final String modifiedString;

    private StringWithMapping(int[] originalToModifiedMapping, String modifiedString) {
        this.originalToModifiedMapping = originalToModifiedMapping;
        this.modifiedString = modifiedString;
    }

    public int convertPosition(int originalPosition) {
        // Sequence end case
        if (originalPosition == originalToModifiedMapping.length)
            return originalToModifiedMapping[originalPosition - 1] + 1;
        // Out of range
        if (originalPosition >= originalToModifiedMapping.length)
            return -1;
        // Negative value counts from the end of the sequence
        if (originalPosition < 0)
            return convertPosition(originalToModifiedMapping.length + originalPosition + 1);
        // Normal conversion
        return originalToModifiedMapping[originalPosition];
    }

    public String getModifiedString() {
        return modifiedString;
    }

    public static StringWithMapping removeSymbol(String originalString, char charToRemove) {
        int modifiedStringLength = 0;
        for (int i = 0; i < originalString.length(); i++)
            if (originalString.charAt(i) != charToRemove)
                ++modifiedStringLength;
        char[] modifiedString = new char[modifiedStringLength];
        int[] mapping = new int[originalString.length()];
        int j = 0;
        for (int i = 0; i < originalString.length(); i++)
            if (originalString.charAt(i) != charToRemove) {
                mapping[i] = j;
                modifiedString[j++] = originalString.charAt(i);
            } else {
                mapping[i] = -1;
            }
        return new StringWithMapping(mapping, new String(modifiedString));
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy