Problema com String.split()

3 respostas
cv1

Essa é bobinha, mas tem horas que o cérebro trava :smiley:

Eu tenho uma String que é nada mais do que o nome de uma classe, seguindo as convenções Sun de nomenclatura, p.e.:

nome.do.pacote.tools.NomeDaClasse

Como eu faço uma expressão regular no split() dessa string, ou uso outro método qualquer, para conseguir isso:

Nome Da Classe

Alguma idéia? :slight_smile:

3 Respostas

marciolx
import java.util.regex.*;
import java.io.*;

public class Splitter {
    public static String [] split(String str, String separador) throws Exception {
        Pattern p = Pattern.compile(separador); // para . use [.]+
	String[] resultado = p.split(str);
	return resultado;    
	}
    // main para testes
    public static void main(String [] args) {
	    try {
		    String [] as = split("Pacote.Nome.da.Classe", "[.]+");
		    for (int i = 0; i< as.length; i++)
			    System.out.println(as[i]);
	    } catch (Exception e) {
		    System.out.println(e);
	    }
    }
}
Leandro_Rangel_Santo

não sei usar expressões regulares direito ,então vou sugerir outros metodos
primeiro ,você pode usar o StringTokenizer para separar nome.do.pacote.tools.NomeDaClasse em tokens ,indicando que o separador é o “.”
com isso ,você pega o ultimo token , que vai ser o “NomeDaClasse”
pronto ,agora sabendo que a classe Character tem o metodo isLowerCase que te retorna um booleando indicando se o caracter é minusculo ou não ,vc pode interar a string ,e pegar as posições dos caracteres maiusculos
bom ,foi uma solução ,não sei se foi a mais elegante :slight_smile:

cv1

Pessoal, valeu pela força :)

O Rafael Steil acabou me dando a dica de usar o isUpperCase, e o código acabou assim:

private static String beautifyClass(String line) {
		int idx = line.lastIndexOf(".");
		if (idx == -1) {
			return beautifyName(line);
		} else {
			return beautifyName(line.substring(idx + 1));
		}
	}
private static String beautifyName(String line) {
		char[] chars = line.toCharArray();
		StringBuffer ret = new StringBuffer();

		for (int i = 0; i < chars.length; i++) {
			char c = chars[i];
			if (Character.isUpperCase(c)) {
				if (i > 0) {
					ret.append(" " + c);
				} else {
					ret.append(c);
				}
			} else {
				ret.append(c);
			}
		}
		return ret.toString();
	}
Criado 23 de julho de 2003
Ultima resposta 23 de jul. de 2003
Respostas 3
Participantes 3