Pessoal e possivel eu validar uma sequencia de caraceteres?
eu tenho “AAAAAA” e tenho “AAAAAB” tenhoq falar q a “AAAAAB” e maior q a outra… sempre vai ser maiuscula e sempre o mesmo numero de caracteres…
obrigado
Pessoal e possivel eu validar uma sequencia de caraceteres?
eu tenho “AAAAAA” e tenho “AAAAAB” tenhoq falar q a “AAAAAB” e maior q a outra… sempre vai ser maiuscula e sempre o mesmo numero de caracteres…
obrigado
A classe String já implementa a interface Comparable. Então vc pode colocar as Strings em uma lista e ordená-las. Só seria bom que vc desse uma lida em como a interface é implementada…
Use expressão regular crie um Pattern :
Ex:
public class Teste {
public static void main(String[] args) {
String ocorrencia = "AAAAAAAAAAAB";
Pattern p = Pattern.compile("[A-Z]{6}");
Matcher m = p.matcher(ocorrencia);
while (m.find()) {
System.out.println(m.group(0));
//faz alguma coisa
}
}
}
Boa ideia, só complementando, geralmente o compareTo retorna 3 tipo de valores, negativo, caso o valor no parametro é menor que o que está comparando… tipo new Integer(0).compareTo(1); // retorno == valor negativo
Se o valor for igual o retorno será 0 e se o parametro comparado for maior o retorno é maior que 1…
Você pode tb usar os codigos unicode do character para comparar… o A tem valor maior que Z… saca, só transformar a string num array de chars e comparar um a um…
Comparable é uma boa saída mesmo…
entao mas bruno ja tentei isso. mas por exemplo eu tenho q ver se os anterios sao menores. ou maiores tbm…
pq DDD emaior do que AAE e se eu comprar por caracter qd chegar no E ele vai falar q eh maior e retorna erro
[quote=fabioebner]entao mas bruno ja tentei isso. mas por exemplo eu tenho q ver se os anterios sao menores. ou maiores tbm…
pq DDD emaior do que AAE e se eu comprar por caracter qd chegar no E ele vai falar q eh maior e retorna erro
[/quote]
Bom… erro?? mas ai é que está, a comparação ira chegar ou primeiro caracter, e vc falou que todas as strings terao o mesmo tamanho, o primeiro de uma é ‘D’ e o da segunda é ‘A’… a comparação já para por ai… não?!
Pelo que entendi a quantidade de caracteres é fixa não é?
[list]Se a posição do caracter for importante (como na formação dos números), isto é, AAAAAB é “menor” que BAAAAA, atribua para cada posição um valor e multiplique esse valor pelo código ASCII do caracter da posição. Compare os totais.[/list]
[list]Se não for importante, simplesmente faça o que o BrunoCarlo sugeriu. Pegue o código ASCII de cada caracter, some e compare os totais.[/list]
Acho que esta solução funciona até para tamanhos de Strings variáveis, só vai dar mais trabalho.
Fiquei só na análise. Se ainda for necessário, quando eu chegar em casa dou uma atenção maior (implementando estas soluções) a esse seu problema e posto o resultado. Achei o problema interessante.
Boa sorte.
Abraços.
[quote=fabioebner]Pessoal e possivel eu validar uma sequencia de caraceteres?
eu tenho “AAAAAA” e tenho “AAAAAB” tenhoq falar q a “AAAAAB” e maior q a outra… sempre vai ser maiuscula e sempre o mesmo numero de caracteres…
obrigado[/quote]
String x = "AAAAAA";
String y = "AAAAAB";
int comp = x.compareTo (y);
if (comp < 0)
System.out.println ("x vem antes de y");
else if (comp > 0)
System.out.println ("x vem depois de y");
else
System.out.println ("x é igual a y");
thingol.
foi assim q eu fiz obrigado mesmo assim
Dá uma reavaliada nos nomes, pois fiz na pressa:
import java.util.ArrayList;
import java.util.List;
public class CadeiaChar {
public static void main(String[] args) {
final String str1 = "AAAAAB";
final String str2 = "BAAAAA";
List<CadeiaCaracter> listaDeCadeias = new ArrayList<CadeiaCaracter>();
CadeiaCaracter valor1 = new CadeiaCaracter(str1);
listaDeCadeias.add(valor1);
CadeiaCaracter valor2 = new CadeiaCaracter(str2);
listaDeCadeias.add(valor2);
for (CadeiaCaracter cadeia: listaDeCadeias) {
System.out.println("O total de " + cadeia.getValor() + " é " + cadeia.getTotal());
}
CadeiaCaracter maiorTotal = getMaior(listaDeCadeias);
System.out.println("*************************");
System.out.println("A maior delas é " + maiorTotal.getValor() +
" com uma pontuação de " + maiorTotal.getTotal());
}
private static CadeiaCaracter getMaior(List<CadeiaCaracter> valores) {
Long maior = 0L;
CadeiaCaracter maiorTotal = new CadeiaCaracter();
for (CadeiaCaracter valor: valores) {
maior = Math.max(maior, valor.getTotal());
if (valor.getTotal().equals(maior)) {
maiorTotal = valor;
}
}
return maiorTotal;
}
}
public class CadeiaCaracter {
private String valor = "";
public CadeiaCaracter(String valor) {
super();
this.valor = valor;
}
public Long getTotal() {
Long total = 0L;
for (int i = 0; i < valor.length(); i++) {
total += ((valor.length() - i) * ((int)valor.charAt(i)));
}
return total;
}
public String getValor() {
return valor;
}
public CadeiaCaracter() {
super();
}
}
Espero que tenha o comportamento que você espera.
Abraços.
Analisando a solução do thingol percebi que você poderia estar se referindo a ordem alfabética. Bem, pelo que sugeri, deu para perceber que não entendi dessa forma. :oops:
Se for por valor (ordem no alfabeto e sua pos na String), o que eu sugeri seria uma solução, mas para ordem alfabética, claramente, a minha solução não funciona. Teria que usar a do thingol, ou essa:
final String str1 = "ACD";
final String str2 = "ABE";
TreeSet<String> treeString = new TreeSet<String>();
treeString.add(str1);
treeString.add(str2);
System.out.println("A cadeia " + treeString.first() + " é anterior a " + treeString.last());
Abraços.