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

org.codehaus.groovy.util.StringUtil.groovy Maven / Gradle / Ivy

There is a newer version: 3.0.21
Show newest version
/*
 * Copyright 2009-2010 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.codehaus.groovy.util

/**
 * Provides Groovy with functionality similar to the unix tr command
 * which translates a string replacing characters from a source set
 * with characters from a replacement set.
 *
 * @author UEHARA Junji (uehaj)
 * @author NAKANO Yasuharu (nobeans)
 * @since 1.7.3
 */
class StringUtil {

    static String tr(String text, String source, String replacement) {
        if (!text || !source) { return text }
        source = expandHyphen(source)
        replacement = expandHyphen(replacement)

        // padding replacement with a last character, if necessary
        replacement = replacement.padRight(source.size(), replacement[replacement.size() - 1])

        return text.collect { original ->
            if (source.contains(original)) {
                replacement[source.lastIndexOf(original)]
            } else {
                original
            }
        }.join()
    }

    // no expansion for hyphen at start or end of Strings
    private static String expandHyphen(String text) {
        if (!text.contains('-')) { return text }
        return text.replaceAll(/(.)-(.)/, { all, begin, end -> (begin..end).join() })
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy