Preciso de ajuda para trabalhar com uma substring, ao invés de colocar os valores inicial e final gostaria que esses valores fossem passados através de variaveis
Com o código abaixo a string subfrase retorna “minha”.
public class LerSubstring{
public static void main(String[] args){
String frase = "Aqui está a minha String";
String subfrase = frase.substring(12, 17);
System.out.println(subfrase);
System.exit(0);
}
}
Gostaria que os valores 12 e 17 pudesse ser substituídos por váriaveis, principalmente o valor inicial, pois o valor final eu obtenho com o indexOf().
Por exemplo:
public class LerSubstring{
public static void main(String[] args){
String frase = "Aqui está a minha String";
String subfrase = frase.substring(12, frase.indexOf(" "));
System.out.println(subfrase);
System.exit(0);
}
}
Meu problema mesmo é atribuir uma variável para o valor inicial. Alguém pode me ajudar?[size=18] [/size]
O método indexOf retorna o índice da primeira ocorrência do termo passado por parâmetro. E se o termo não for encontrado, o retorno é -1.
[code]String index = JOptionPane.showInputDialog("Informe o INDEX inicial: ");
String subfrase = novodoc.substring(novodoc.indexOf(index), novodoc.indexOf("//"));[/code]Neste caso, se o conteúdo de index não for encontrado em novodoc, será passado -1 para o método substring, o que irá ocasionar uma exceção. Ocorrerá o mesmo se “//” não for encontrado.
Se a intenção é receber o índice inicial pelo inputDialog, seria melhor convertê-lo para int.
[code]int index = Integer.parseInt(JOptionPane.showInputDialog("Informe o INDEX inicial: "));
String subfrase = novodoc.substring(index, novodoc.indexOf("//"));[/code]Poderia também postar a exceção que está ocorrendo?
Desculpe se não consegui ser muito claro.
E só por curiosidade:
//Enquanto houver um proximo caracter a variavel recebe o scanner
while (scanner.hasNext()) {
String readLine = scanner.next();
novodoc = (novodoc + readLine.substring(0));// variavel recebe as sequencias do documento
}Este trecho está eliminando os espaços?
Quanto a sua curiosidade o trecho abaixo retorna uma string sem espaços, fica tudo numa linha só.
//Enquanto houver um proximo caracter a variavel recebe o scanner
while (scanner.hasNext()) {
String readLine = scanner.next();
novodoc = (novodoc + readLine.substring(0));// variavel recebe as sequencias do documento
}
Conforme você sugeriu converti a variável para integer e ficou assim:
import java.io.File;
import java.io.FileInputStream;
import java.util.Scanner;
import javax.swing.JOptionPane;
public class LerSubstring {
public static void main(String[] args) {
String novodoc = "";
try {
File arquivo = new File("alt_Celera_chr222.gbk"); //Localiza o arquivo
FileInputStream in = new FileInputStream(arquivo);
Scanner scanner = new Scanner(in);
//Enquanto houver um proximo caracter a variavel recebe o scanner
while (scanner.hasNext()) {
String readLine = scanner.next();
novodoc = (novodoc + readLine.substring(0));// variavel recebe as sequencias do documento
}
} catch (Exception e) {
System.out.println("Ocorreu algum erro. Erro: " + e);
}
System.out.println(novodoc);
String locus = "LOCUS" + JOptionPane.showInputDialog("Informe o LOCUS: "); //Variavel recebe o valor do LOCUS
int index = novodoc.lastIndexOf(locus); //Variavel int que vai receber a posição do locus
String subfrase = novodoc.substring(index, novodoc.indexOf("//"));
System.out.println(subfrase);
System.exit(0);
}
}
Foi por falta de conhecimento mesmo, o index final estava retornando um valor menor que o index inicial, existem várias ocorrências de “//”, como o indexOf() pega a primeira ocorrência estava dando erro.
Antes de dar o post como RESOLVIDO, tenho mais uma pergunta: Tem como resolver o problema deste indice final? Será que dentro de um if percorrendo a string e verificando se a posição atual é maior que o indice, daí sim começar o processo de substring?
[quote=asandro1501]Antes de dar o post como RESOLVIDO, tenho mais uma pergunta: Tem como resolver o problema deste indice final? Será que dentro de um if percorrendo a string e verificando se a posição atual é maior que o indice, daí sim começar o processo de substring?[/quote]Tem o método “indexOf(String str, int fromIndex)”, no parâmetro “fromIndex”, você informa a partir de qual índice ele deve começar a procurar pela ocorrência.
String subfrase = novodoc.substring(index, novodoc.indexOf("//", index));Assim o índexOf deve procurar pela primeira ocorrência após o inicial do substring.
Quanto a parte de tirar os espaços, dá pra fazer linha por linha:
//Enquanto houver um proximo caracter a variavel recebe o scanner
while (scanner.hasNextLine()) {
String readLine = scanner.nextLine().replaceAll(" ", ""); //Este replaceAll troca os espaços por uma String vazia.
novodoc += readLine;
}Não sei se melhora o desempenho porque eu não sei como trabalha o método replaceAll, mas isso deve diminuir os loops do seu código.