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

com.arch.util.CaracterUtils Maven / Gradle / Ivy

package com.arch.util;

import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.util.Collections;
import java.util.Locale;

public class CaracterUtils {

    /**
     * Para a normalização dos caracteres de 32 a 255, primeiro caracter
     */
    private static final char[] FIRST_CHAR = (" !'#$%&'()*+\\-./0123456789:;<->?@ABCDEFGHIJKLMNOPQRSTUVWXYZ"
            + "[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ E ,f'.++^%So ZY !C#$Y|$'(a<--(_o+23'u .,1o>113?AAAAAAACEEEEIIIIDNOO"
            + "OOOXOUUUUyTsaaaaaaaceeeeiiiidnooooo/ouuuuyty").toCharArray();

    /**
     * Para a normalização dos caracteres de 32 a 255, segundo caracter
     */
    private static final char[] SECOND_CHAR = ("  '         ,                                               "
            + "\\                                   $  r'. + o  E      ''  " + "  M  e     #  =  'C.<  R .-..     ..>424     E E            "
            + "   E E     hs    e e         h     e e     h ").toCharArray();
    private static final String PT_BR = "pt-BR";

    public static String alinharTextoEsquerda(String texto, int tamanho) {
        return alinharTexto(texto, tamanho, " ", Direcao.ESQUERDA);
    }

    public static String alinharTextoEsquerda(String texto, int tamanho, String letra) {
        return alinharTexto(texto, tamanho, letra, Direcao.ESQUERDA);
    }

    public static String alinharTextoDireita(String texto, int tamanho) {
        return alinharTexto(texto, tamanho, " ", Direcao.DIREITA);
    }

    public static String alinharTextoDireita(String texto, int tamanho, String letra) {
        return alinharTexto(texto, tamanho, letra, Direcao.DIREITA);
    }

    private static String alinharTexto(String value, int tamanho, String caracter, Direcao direcao) {

        String texto = value;

        // Checa se Linha a preencher � nula ou branco
        if (texto == null || "".equals(texto.trim())) {
            texto = "";
        }

        // Enquanto Linha a preencher possuir 2 espa�os em branco seguidos,
        // substitui por 1 espa�o apenas
        while (texto.contains("  ")) {
            texto = texto.replaceAll("  ", " ").trim();
        }

        // Retira caracteres estranhos
        texto = texto.replaceAll("[./-]", "");

        if (texto.length() > tamanho) {
            texto = texto.substring(0, tamanho);
        }

        StringBuilder sb = new StringBuilder(texto);

        if (direcao == Direcao.ESQUERDA) { // a Esquerda
            for (int i = sb.length(); i < tamanho; i++) {
                sb.append(caracter);
            }
        } else {// a Direita
            for (int i = sb.length(); i < tamanho; i++) {
                sb.insert(0, caracter);
            }
        }
        return sb.toString();
    }

    public static String removerCaracter(String value, String caracteres) {
        String texto = value;

        if (texto == null || "".equals(texto.trim())) {
            texto = "";
        }

        while (texto.contains("  ")) {
            texto = texto.replaceAll("  ", " ").trim();
        }

        // Retira caracteres estranhos
        texto = texto.replaceAll("[" + caracteres + "]", "").trim();

        return texto;
    }

    public static String formatarIM(String numero) {
        if (numero == null) {
            return "";
        }

        return numero.substring(0, numero.length() - 1) + "-" + numero.substring(numero.length() - 1);
    }

    public static String somenteNumero(String value) {

        StringBuilder numbers = new StringBuilder();

        for (char ch : value.toCharArray()) {
            if (Character.isDigit(ch)) {
                numbers.append(Character.toString(ch));
            }
        }

        return numbers.toString();
    }

    public static String somenteLetraOuNumero(String value) {

        StringBuilder numbers = new StringBuilder();

        for (char ch : value.toCharArray()) {
            if (Character.isDigit(ch) || Character.isAlphabetic(ch)) {
                numbers.append(Character.toString(ch));
            }
        }

        return numbers.toString();
    }

    public static String primeiraPalavra(String texto) {
        String primeiraPalavra = texto;

        int posicaoEspaco = primeiraPalavra.indexOf(' ');

        if (posicaoEspaco > 0) {
            primeiraPalavra = primeiraPalavra.substring(0, posicaoEspaco);
        }

        return primeiraPalavra;
    }

    public static String ultimaPalavra(String texto) {
        String ultimaPalavra = texto;

        int posicaoEspaco = ultimaPalavra.lastIndexOf(' ');

        if (posicaoEspaco > 0) {
            ultimaPalavra = ultimaPalavra.substring(posicaoEspaco + 1);
        }

        return ultimaPalavra;
    }

    public static String formataLikeSql(String conteudo) {
        if (NumberUtils.containsOnlyNumber(conteudo)) {
            Long numero = new Long(conteudo);
            return numero.toString();
        }

        return conteudo.toLowerCase(Locale.forLanguageTag(PT_BR));
    }

    /**
     * Efetua as seguintes normalizações para obtenção de certificados: -
     * Elimina acentos e cedilhas dos nomes; - Converte aspas duplas em simples;
     * - Converte algumas letras estrangeiras para seus equivalentes ASCII (como
     * ß, convertido para ss) - Põe um "\" antes de vírgulas, permitindo nomes
     * como "Verisign, Corp." e de "\", permitindo nomes como " a \ b "; -
     * Converte os sinais de = para - - Alguns caracteres são removidos: - os
     * superiores a 255, mesmo que possam ser representados por letras latinas
     * normais (como s, = U+015E = Latin Capital Letter S With Cedilla); - os
     * caracteres de controle (exceto tab, que é trocado por um espaço)
     *
     * @param str A string a normalizar.
     * @return A string normalizada.
     */
    public static String removeCaracteresEspeciais(String str) {
        char[] chars = str.toCharArray();
        StringBuilder ret = new StringBuilder(chars.length * 2);
        for (int i = 0; i < chars.length; ++i) {
            char aChar = chars[i];
            if (aChar == ' ' || aChar == '\t') {
                ret.append(' '); // convertido para espaço
            } else if (aChar > ' ' && aChar < 256) {
                if (FIRST_CHAR[aChar - ' '] != ' ') {
                    ret.append(FIRST_CHAR[aChar - ' ']); // 1 caracter
                }
                if (SECOND_CHAR[aChar - ' '] != ' ') {
                    ret.append(SECOND_CHAR[aChar - ' ']); // 2 caracteres
                }
            }
        }

        return ret.toString();
    }

    public static String uTF8toISO(String str) {
        Charset utf8 = Charset.forName("UTF-8");
        Charset iso = Charset.forName("ISO-8859-1");

        ByteBuffer inputBuffer = ByteBuffer.wrap(str.getBytes());

        CharBuffer data = utf8.decode(inputBuffer);

        // encode ISO-8559-1
        ByteBuffer outputBuffer = iso.encode(data);
        byte[] outputData = outputBuffer.array();

        return new String(outputData);
    }

    public static String iSOtoUTF8(String str) {
        Charset utf8charset = Charset.forName("UTF-8");
        Charset iso88591charset = Charset.forName("ISO-8859-1");

        ByteBuffer inputBuffer = ByteBuffer.wrap(str.getBytes());

        // decode UTF-8
        CharBuffer data = iso88591charset.decode(inputBuffer);

        // encode ISO-8559-1
        ByteBuffer outputBuffer = utf8charset.encode(data);
        byte[] outputData = outputBuffer.array();

        return new String(outputData);
    }

    public static String firstCaracterLowerCase(String value) {
        return value.substring(0, 1).toLowerCase(Locale.forLanguageTag(PT_BR)).concat(value.substring(1));
    }
    
    public static String firstCaracterUpperCase(String value) {
        return value.substring(0, 1).toUpperCase(Locale.forLanguageTag(PT_BR)).concat(value.substring(1));
    }
    
    public static String removeHtmlTags(String value) {
        return value == null ? "" : value.replaceAll("\\<[^>]*>", "").trim();
    }

    public static String replicate(String value, int size) {
        return String.join("", Collections.nCopies(size, "" + value));
    }


    private enum Direcao {
        ESQUERDA, DIREITA
    }


    public static void main(String... args) {
        LogUtils.warning(somenteNumero("123ABCabc..0.456789ç.;,askfj"));

        LogUtils.warning("123ABCabc..0.456789ç.;,askfj".toLowerCase(Locale.forLanguageTag("pt-BR")));
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy