Errore indice posizione 0 solo valori di ritorno

di il
25 risposte

Errore indice posizione 0 solo valori di ritorno


String a = "2 - Selezionati casa";
		char r;
		int [] n = new int [9];
		
		for (int i = 0; i <= a.length(); i++) {
			if(n[i] == a.charAt(0)) {
				r = a.charAt(0);
				System.out.println(r);
			}
		}

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9

25 Risposte

  • Re: Errore indice posizione 0 solo valori di ritorno

    imparareJava ha scritto:


    
    String a = "2 - Selezionati casa";
    		int [] n = new int [9];
    		
    		for (int i = 0; i <= a.length(); i++) {
    			if(n[i] == a.charAt(0)) {
    
    L'indice i è sulla stringa a (la condizione del for infatti è sul length di a). Tra l'altro è sbagliato il <= perché andresti comunque concettualmente "fuori" dalla stringa (ma non vedo dei a.charAt(i) ).
    Ma il punto è che quell'indice lo usi anche per indirizzare in n. Ma l'array n è più corto della stringa, ha meno indici.
    Quindi? Cosa stavi cercando di fare?
  • Re: Errore indice posizione 0 solo valori di ritorno

    
    String a = "2 - Selezionati casa";
    		char r;
    		int[] n = new int[9];
    		String pezzo1 = "";
    		String pezzo2 = "";
    		String conc = "";
    		for (int i = 0; i < a.length(); i++) {
    			/*
    			 * In pratica nella posizione 0 della variabile "a" devo verificare se ci
    			 * sono numeri da 0 a 9. Se il numero è 2 nella posizione iniziale 0, allora
    			 * inizio a tagliare la stringa. 
    			 */
    			if (a.charAt(i)) {
    				pezzo1 = a.substring(0, 4);
    				pezzo2 = a.substring(4);
    				conc = pezzo1 + pezzo2;
    
    			}
    		}
    
    	}
    
    
    
    /*
    * In pratica nella posizione 0 della variabile "a" devo verificare se ci
    * sono numeri da 0 a 9. Se il numero è 2 nella posizione iniziale 0, allora
    * inizio a tagliare la stringa.
    */

    Nella posizione 0 devo sempre verificare se ci sono numeri.
  • Re: Errore indice posizione 0 solo valori di ritorno

    imparareJava ha scritto:


    		for (int i = 0; i == a.length(); i++) {
    			if (a.charAt(i)) {
    				pezzo1 = a.substring(0, 4);
    				pezzo2 = a.substring(4);
    
    Quello che hai scritto NON ha senso.
    Non ha senso il i == a.length()
    Non ha senso a.charAt(i) direttamente così nella condizione di un if
    Non ha senso fare un substring(0, 4) quando sei in un ciclo for del genere (e comunque a fronte delle cose dubbie precedenti).
  • Re: Errore indice posizione 0 solo valori di ritorno

    
    String a = new String("0 - Selezionati casa");
    		String pezzo1 = "";
    		String pezzo2 = "";
    		String conc = "";
    		for (int i = 0; i < a.length(); i++) {
    			/*
    			 * In pratica nella posizione 0 della variabile "a" devo verificare se ci
    			 * sono numeri da 0 a 9. Se il numero è 2 nella posizione iniziale 0, allora
    			 * inizio a tagliare la stringa. 
    			 */
    			if (a.charAt(i) == '2' || a.charAt(i) == '1' || a.charAt(i) == '0') {
    				pezzo1 = a.substring(0, 4);
    				pezzo2 = a.substring(4);
    				conc = pezzo1 + pezzo2;
    				System.out.println(conc);
    			}
    		}
    
    	}
    
    
    L'ho fatto in questo modo, ma essendo che devo trasformare in questo modo:
    
    public void getTraduttoreIt_ENUM_NLS() throws Exception {
    	List<EnumNls> db2 = getListEnumNls();
    	List<DizioPt> sqlServer = getListDizioPt();
    	BufferedWriter scrivi = new BufferedWriter(new FileWriter("C:/Users/francesco/Desktop/Table_THERA.ENUM_NLS_Sez4.txt"));
    	System.out.println("-------------------WRITE FILE N°4--------TRANSLATION------------------------");
    	for (int i = 0; i < db2.size(); i++) {
    		for (int j = 0; j < sqlServer.size(); j++) {
    		if (db2.get(i).getEnumDesc().equals(sqlServer.get(j).getKeyword()) && db2.get(i).getEnumDesc().substring(4).equals(sqlServer.get(j).getKeyword())) {
    					
    				//Qui devo fare la stessa cosa ma con gli oggetti	
    					System.out.println(
    							"INSERT INTO THERA.ENUM_NLS VALUES" + "(" + "'" + db2.get(i).getAttributeRef().trim() + "'"
    									+ "," + "'" + db2.get(i).getEnumValue().trim() + "'" + "," + "'" + "en" + "'" + ","
    									+ "'" + sqlServer.get(j).getTraduzione().trim() + "'" + ")" + ";");
    
    					scrivi.write("INSERT INTO THERA.ENUM_NLS VALUES" + "(" + "'" + db2.get(i).getAttributeRef().trim()
    							+ "'" + "," + "'" + db2.get(i).getEnumValue().trim() + "'" + "," + "'" + "en" + "'" + ","
    							+ "'" + sqlServer.get(j).getTraduzione().trim() + "'" + ")" + ";");
    
    					scrivi.newLine();
    					scrivi.flush();
    				}
    			}
    
    		}
    		scrivi.close();
    	}
    
    
  • Re: Errore indice posizione 0 solo valori di ritorno

    imparareJava ha scritto:


    			if (a.charAt(i) == '2' || a.charAt(i) == '1' || a.charAt(i) == '0') {
    				pezzo1 = a.substring(0, 4);
    				pezzo2 = a.substring(4);
    				conc = pezzo1 + pezzo2;
    Ma non capisco perché devi fare tutta 'sta cosa. Se fai questi due substring e poi ricomponi i due pezzi, riottieni la stessa stringa. Non capisco ....

    Se fosse che data una stringa es. "3748hello" vuoi ottenere solo "hello" (cioè togliere i numeri iniziali), ti assicuro che sarebbe più semplice di quanto pensi.
  • Re: Errore indice posizione 0 solo valori di ritorno

    In questo codice:
    
    public void getTraduttoreIt_ENUM_NLS() throws Exception {
    		List<EnumNls> db2 = getListEnumNls();
    		List<DizioPt> sqlServer = getListDizioPt();
    		
    		BufferedWriter scrivi = new BufferedWriter(
    				new FileWriter("C:/Users/francesco/Desktop/Table_THERA.ENUM_NLS_Sez4.txt"));
    		System.out.println("-------------------WRITE FILE N°4--------TRANSLATION------------------------");
    		for (int i = 0; i < db2.size(); i++) {	
    			for (int j = 0; j < sqlServer.size(); j++) {
    				if (db2.get(i).getEnumDesc().equals(sqlServer.get(j).getKeyword())) {
    
    					System.out.println(
    							"INSERT INTO THERA.ENUM_NLS VALUES" + "(" + "'" + db2.get(i).getAttributeRef().trim() + "'"
    									+ "," + "'" + db2.get(i).getEnumValue().trim() + "'" + "," + "'" + "en" + "'" + ","
    									+ "'" + sqlServer.get(j).getTraduzione().trim() + "'" + ")" + ";");
    
    					scrivi.write("INSERT INTO THERA.ENUM_NLS VALUES" + "(" + "'" + db2.get(i).getAttributeRef().trim()
    							+ "'" + "," + "'" + db2.get(i).getEnumValue().trim() + "'" + "," + "'" + "en" + "'" + ","
    							+ "'" + sqlServer.get(j).getTraduzione().trim() + "'" + ")" + ";");
    
    					scrivi.newLine();
    					scrivi.flush();
    				}
    			}
    
    		}
    		scrivi.close();
    	}
    
    }
    
    
    oltre a restituire le stringhe db2.get(i).getEnumDesc() che sono stringhe normale.
    ci sono alcune stringhe del tipo : 1 - Selezionati casa in db2.get(i).getEnumDesc()
    devo tagliare --> 1 -
    la parte tagliata selezionati casa l'ho traduco e poi lo ricompongo.
    1 - select house

    in pratica in output mi deve restituire non solo le stringhe normali anche le stringhe con i numeri cioè 1 - select house
    in uscita stampata:
    es.
    house
    hello
    1 - select
    2 - bye
    ecc...
  • Re: Errore indice posizione 0 solo valori di ritorno

    imparareJava ha scritto:


    devo tagliare --> 1 -
    la parte tagliata selezionati casa l'ho traduco e poi lo ricompongo.
    1 - select house
    Lo fai con una regular expression che possa catturare la parte "1 - " (ovvero una o più cifre, uno più spazi, trattino, uno o più spazi) e l'altra parte "select house".
  • Re: Errore indice posizione 0 solo valori di ritorno

    
    public void getTraduttoreIt_ENUM_NLS() throws Exception {
    		List<EnumNls> db2 = getListEnumNls();
    		List<DizioPt> sqlServer = getListDizioPt();
    		String conc = "";
    		BufferedWriter scrivi = new BufferedWriter(
    				new FileWriter("C:/Users/francesco/Desktop/Table_THERA.ENUM_NLS_Sez4.txt"));
    		System.out.println("-------------------WRITE FILE N°4--------TRANSLATION------------------------");
    		for (int i = 0; i < db2.size(); i++) {	
    			for (int j = 0; j < sqlServer.size(); j++) {
    				if (db2.get(i).getEnumDesc().equals(sqlServer.get(j).getKeyword()) && db2.get(i).getEnumDesc().charAt(i) == '1') {
    					String pezzo1 = db2.get(i).getEnumDesc().substring(0, 4);
    					String pezzo2 = db2.get(i).getEnumDesc().substring(4);
    					if(pezzo2.equals(sqlServer.get(j).getKeyword())) // Tagliato la stringa
    						conc =   pezzo1 + sqlServer.get(j).getTraduzione().trim();
    						
    					System.out.println(
    							"INSERT INTO THERA.ENUM_NLS VALUES" + "(" + "'" + db2.get(i).getAttributeRef().trim() + "'"
    									+ "," + "'" + db2.get(i).getEnumValue().trim() + "'" + "," + "'" + "en" + "'" + ","
    									+ "'" + sqlServer.get(j).getTraduzione().trim() + "'" + ")" + ";");
    					
    					//Il pezzo che stato tradotto 1 - select house
    					System.out.println(
    							"INSERT INTO THERA.ENUM_NLS VALUES" + "(" + "'" + db2.get(i).getAttributeRef().trim() + "'"
    									+ "," + "'" + db2.get(i).getEnumValue().trim() + "'" + "," + "'" + "en" + "'" + ","
    									+ "'" + conc + "'" + ")" + ";");
    
    					scrivi.write("INSERT INTO THERA.ENUM_NLS VALUES" + "(" + "'" + db2.get(i).getAttributeRef().trim()
    							+ "'" + "," + "'" + db2.get(i).getEnumValue().trim() + "'" + "," + "'" + "en" + "'" + ","
    							+ "'" + sqlServer.get(j).getTraduzione().trim() + "'" + ")" + ";");
    					
    					scrivi.write("INSERT INTO THERA.ENUM_NLS VALUES" + "(" + "'" + db2.get(i).getAttributeRef().trim()
    							+ "'" + "," + "'" + db2.get(i).getEnumValue().trim() + "'" + "," + "'" + "en" + "'" + ","
    							+ "'" + conc + "'" + ")" + ";");
    
    					scrivi.newLine();
    					scrivi.flush();
    				}
    			}
    
    		}
    		scrivi.close();
    	}
    
    
    L'ho realizzato in questo modo.
    Come posso utilizzare le espressioni regolare, in questo caso?
  • Re: Errore indice posizione 0 solo valori di ritorno

    imparareJava ha scritto:


    Come posso utilizzare le espressioni regolare, in questo caso?
    Con questo Pattern:
    Pattern prefissoDescrizionePattern = Pattern.compile("(\\d+\\s*-\\s*)?(.*)");
    si può fare. Sul Matcher fai un find(), poi group(1) dà il prefisso, group(2) dà la descrizione. Ho pure contemplato il fatto che il prefisso possa (eventualmente) NON esserci (il group 1 ti darebbe null, che puoi ignorare).

    E la forma del prefisso è pure abbastanza "ampia".
  • Re: Errore indice posizione 0 solo valori di ritorno

    Nel mio caso come posso applicare?
    Ho fatto delle modifiche:

    Pattern prefissoDescrizionePattern = Pattern.compile("(\\d+\\s*-\\s*)?(.*)"); --> qui accetta d+ --> da 0 a 9, s*- --> qui i trattini , s*)?(.*) --> qui le lettere
    
    public void getTraduttoreIt_ENUM_NLS() throws Exception {
    		List<EnumNls> db2 = getListEnumNls();
    		List<DizioPt> sqlServer = getListDizioPt();
    		
    		Pattern prefissoDescrizionePattern = Pattern.compile("(\\d+\\s*-\\s*)?(.*)");
    
    		BufferedWriter scrivi = new BufferedWriter(
    				new FileWriter("C:/Users/francesco/Desktop/Table_THERA.ENUM_NLS_Sez4.txt"));
    		System.out.println("-------------------WRITE FILE N°4--------TRANSLATION------------------------");
    		for (int i = 0; i < db2.size(); i++) {
    			Matcher enumDescPulito = prefissoDescrizionePattern.matcher(db2.get(i).getEnumDesc());
    			for (int j = 0; j < sqlServer.size(); j++) {
    				if(enumDescPulito.find()) {
    					if (enumDescPulito.equals(sqlServer.get(j).getKeyword())) {
    	
    						System.out.println(
    								"INSERT INTO THERA.ENUM_NLS VALUES" + "(" + "'" + db2.get(i).getAttributeRef().trim() + "'"
    										+ "," + "'" + db2.get(i).getEnumValue().trim() + "'" + "," + "'" + "en" + "'" + ","
    										+ "'" + sqlServer.get(j).getTraduzione().trim() + "'" + ")" + ";");
    	
    						scrivi.write("INSERT INTO THERA.ENUM_NLS VALUES" + "(" + "'" + db2.get(i).getAttributeRef().trim()
    								+ "'" + "," + "'" + db2.get(i).getEnumValue().trim() + "'" + "," + "'" + "en" + "'" + ","
    								+ "'" + sqlServer.get(j).getTraduzione().trim() + "'" + ")" + ";");
    	
    						scrivi.newLine();
    						scrivi.flush();
    					}
    			}
    		}
    
    		}
    		scrivi.close();
    	}
    
    
    

    In questa parte ho problemi, non so implementare:
    
    public void getTraduttoreIt_ENUM_NLS() throws Exception {
    		List<EnumNls> db2 = getListEnumNls();
    		List<DizioPt> sqlServer = getListDizioPt();
    		
    		Pattern prefissoDescrizionePattern = Pattern.compile("(\\d+\\s*-\\s*)?(.*)");
    
    		BufferedWriter scrivi = new BufferedWriter(
    				new FileWriter("C:/Users/francesco/Desktop/Table_THERA.ENUM_NLS_Sez4.txt"));
    		System.out.println("-------------------WRITE FILE N°4--------TRANSLATION------------------------");
    		for (int i = 0; i < db2.size(); i++) {
    			Matcher enumDescPulito = prefissoDescrizionePattern.matcher(db2.get(i).getEnumDesc());
    			for (int j = 0; j < sqlServer.size(); j++) {
    				if(enumDescPulito.find()) {
    					if (enumDescPulito.equals(sqlServer.get(j).getKeyword())) {
    
    
    Mi puoi gentilmente aiutare ad implementare?

    Grazie
  • Re: Errore indice posizione 0 solo valori di ritorno

    imparareJava ha scritto:


    Nel mio caso come posso applicare?
    Il concetto d'uso che ho pensato è abbastanza semplice:
    Pattern prefissoDescrizionePattern = Pattern.compile("^(\\d+\\s*-\\s*)?(.*)");
    
    // poi per ciascuna stringa da trattare
    String str = .......
    
    Matcher matcher = prefissoDescrizionePattern.matcher(str);
    
    if (matcher.find()) {
        String prefisso = matcher.group(1);
        String descrizione = matcher.group(2);
    
        descrizione = // .... traduci descrizione
    
        String risultato = (prefisso != null ? prefisso : "") + descrizione;   // ricompone prefisso e descrizione tradotta.
    }

    P.S. ho aggiunto ^ all'inizio del pattern per scupolo, avendo usato find() e non matches().
  • Re: Errore indice posizione 0 solo valori di ritorno

    L'ho modificato, NON so se ho scritto bene, comunque non mi restituisce nessun errore.
    
    public void getTraduttoreIt_ENUM_NLS() throws Exception {
    		List<EnumNls> db2 = getListEnumNls();
    		List<DizioPt> sqlServer = getListDizioPt();
    
    		// Espressioni regolari Pattern
    		Pattern prefissoDescrizionePattern = Pattern.compile("(\\d+\\s*-\\s*)?(.*)");
    
    		BufferedWriter scrivi = new BufferedWriter(
    				new FileWriter("C:/Users/francesco/Desktop/Table_THERA.ENUM_NLS_Sez4.txt"));
    		System.out.println("-------------------WRITE FILE N°4--------TRANSLATION------------------------");
    
    		for (int i = 0; i < db2.size(); i++) {
    			// Valore della stringa db2
    			String str = db2.get(i).getEnumDesc(); //valore record db2
    			Matcher matcher = prefissoDescrizionePattern.matcher(str);
    			for (int j = 0; j < sqlServer.size(); j++) {
    				// Faccio la ricerca
    				if (matcher.find()) {
    					String prefisso = matcher.group(1);
    					String descrizione = sqlServer.get(j).getTraduzione();
    					String risultato = (prefisso != null ? prefisso : "") + descrizione;
    					if (risultato.equals(sqlServer.get(j).getKeyword())) {
    						System.out.println(
    								"INSERT INTO THERA.ENUM_NLS VALUES" + "(" + "'" + db2.get(i).getAttributeRef().trim()
    										+ "'" + "," + "'" + db2.get(i).getEnumValue().trim() + "'" + "," + "'" + "en"
    										+ "'" + "," + "'" + sqlServer.get(j).getTraduzione().trim() + "'" + ")" + ";");
    
    						scrivi.write(
    								"INSERT INTO THERA.ENUM_NLS VALUES" + "(" + "'" + db2.get(i).getAttributeRef().trim()
    										+ "'" + "," + "'" + db2.get(i).getEnumValue().trim() + "'" + "," + "'" + "en"
    										+ "'" + "," + "'" + sqlServer.get(j).getTraduzione().trim() + "'" + ")" + ";");
    
    						scrivi.newLine();
    						scrivi.flush();
    					}
    				}
    			}
    
    		}
    		scrivi.close();
    	}
    
    
    
    Non mi stampa niente, non so come posso risolvere.
    Ripeto:
    Quando stampo in output --> sqlServer.get(j).getTraduzione().trim()
    home
    dog
    1 - hello
    ecc...
    non esce niente

    ho provato anche a sostituire, la stringa risultato ma senza indice, io voglio con gli indici
    
    if (risultato.equals(sqlServer.get(j).getKeyword())) {
    						System.out.println(
    								"INSERT INTO THERA.ENUM_NLS VALUES" + "(" + "'" + db2.get(i).getAttributeRef().trim()
    										+ "'" + "," + "'" + db2.get(i).getEnumValue().trim() + "'" + "," + "'" + "en"
    										+ "'" + "," + "'" + risultato.trim() + "'" + ")" + ";");
    
  • Re: Errore indice posizione 0 solo valori di ritorno

    Io presumerei questo ....
    
    		for (int i = 0; i < db2.size(); i++) {
    			// Valore della stringa db2
    			String str = db2.get(i).getEnumDesc(); //valore record db2
    			Matcher matcher = prefissoDescrizionePattern.matcher(str);
    			
    			// QUI dovresti fare il find, prendere prefisso e descrizione
    			
    			for (int j = 0; j < sqlServer.size(); j++) {
    
                                    // QUI vai a cercare la traduzione di descrizione
                                    // if (trovata) {
                                    //    allora ricomponi prefisso + traduzione.
                                    // }
    			}
    		}
    
    P.S. ripeto che per scrupolo ho messo il ^ all'inizio "^(\\d+\\s*-\\s*)?(.*)"
  • Re: Errore indice posizione 0 solo valori di ritorno

    Ho fatto in questo modo, ma non ci riesco, non mi da nessun errore, e non mi restituisce nulla.
    
    public void getTraduttoreIt_ENUM_NLS() throws Exception {
    		List<EnumNls> db2 = getListEnumNls();
    		List<DizioPt> sqlServer = getListDizioPt();
    		String prefisso = null;
    		String descrizione = null;
    		String risultato;
    
    		// Espressioni regolari Pattern
    		Pattern prefissoDescrizionePattern = Pattern.compile("^(\\d+\\s*-\\s*)?(.*)");
    
    		BufferedWriter scrivi = new BufferedWriter(
    				new FileWriter("C:/Users/francesco/Desktop/Table_THERA.ENUM_NLS_Sez4.txt"));
    		System.out.println("-------------------WRITE FILE N°4--------TRANSLATION------------------------");
    
    		for (int i = 0; i < db2.size(); i++) {
    			// Valore della stringa db2
    			String str = db2.get(i).getEnumDesc(); // valore record db2
    			Matcher matcher = prefissoDescrizionePattern.matcher(str);
    
    			// Faccio la ricerca Prefisso
    			if (matcher.find()) {
    				prefisso = matcher.group(1);
    			}
    
    			for (int j = 0; j < sqlServer.size(); j++) {
    
    				// Faccio la ricerca Descrizione
    				if (matcher.find()) {
    					descrizione = sqlServer.get(j).getTraduzione();
    				}
    
    				if (true) {
    					risultato = (prefisso != null ? prefisso : "") + descrizione;
    				}
    				
    				if (risultato.equals(sqlServer.get(j).getKeyword())) {
    					System.out.println("INSERT INTO THERA.ENUM_NLS VALUES" + "(" + "'"
    							+ db2.get(i).getAttributeRef().trim() + "'" + "," + "'" + db2.get(i).getEnumValue().trim()
    							+ "'" + "," + "'" + "en" + "'" + "," + "'" + risultato.trim() + "'" + ")" + ";");
    
    					scrivi.write("INSERT INTO THERA.ENUM_NLS VALUES" + "(" + "'" + db2.get(i).getAttributeRef().trim()
    							+ "'" + "," + "'" + db2.get(i).getEnumValue().trim() + "'" + "," + "'" + "en" + "'" + ","
    							+ "'" + risultato.trim() + "'" + ")" + ";");
    
    					scrivi.newLine();
    					scrivi.flush();
    				}
    			}
    
    		}
    		scrivi.close();
    	}
    
    
    
    
    Mi puoi gentilmente correggere questo codice che ho scritto, gentilmente?
Devi accedere o registrarti per scrivere nel forum
25 risposte