Kleines Problem

julia123

Erfahrenes Mitglied
hi Leute,

bin grade an einem größerem Projekt..., naja. Hab mir mal ein Szenarium erstellt um mein Problem zu lösen:


Java:
public static void main(String[] args) {

		List<String> test = new ArrayList<>();

		test.add("ichdu");
		test.add("duersie");
		test.add("es");
		test.add("er");

		StringBuilder sb = new StringBuilder();

		Iterator<String> it = test.iterator();
		while (it.hasNext()) {

			System.out.println(it.next().charAt(2));
			sb.append(it.next().charAt(2));
		}

	}

Was ich möchte ist einfach die Buchstaben "h" und "e" in ein String speichern.(Ohne das eine Expetion geworfen wird oder zuviel gespeichert wird)

Ist glaube ich ein kleines Problem komm aber nicht drauf wie ich das lösen kann.
 
Mein Problem : " Text vertikal einlesen" .

Theorie :
ich könnte jetzt eine for- Schleife bastelt die 4 (i) mal durch läuft dann würde ich den String = "ides" ( test.get(i).charAt(0) bekommen bis hier hin kein Problem. Dann mach ich weiter String ="cusr". wieder kein Problem. Aber jetzt kommt mein Problem String = "he" hier würde meine Schleife noch mal weiter iterieren und dann käm es zu einer Exeption. :rolleyes:
 
Moin,

was ist denn überhaupt "test" :confused:
Zeig' mal mehr code - ich fürchte, da geht mehr durcheinander ...

Gruß
Klaus
 
Moin,

ah, ok ...

Zum einen hattest Du - wie gesagt - ein "next" zuviel drin (SysOut + append). Holt ja JEDESMAL schon das nächste Element.

Java:
while( it.hasNext() ) 
{
    String sTMP = it.next();
    System.out.println(sTMP);
    sb.append(sTMP.charAt(2));
}

Jetzt hast Du aber noch ein Problem mit den Einträgen "er" und "es", da "charAt(2)" ja das DRITTE Zeichen lesen will, da es hierbei aber nicht gibt!

Gruß
Klaus
 
Hi Julia,

ich nehme an du willst sowas hier:

Code:
import java.util.ArrayList;
import java.util.List;


public class Test
{
  public static void main(String[] args)
  {
	List<String> test = new ArrayList<String>();

	test.add("ichdu");
	test.add("duersie");
	test.add("es");
	test.add("er");

	StringBuilder sb = new StringBuilder();
	int max = findMaxStringLength(test);
	String[] verticalList = new String[max];
	int count = 0;
	for (int j = 0; j < max; j++)
	{
	  for (int i = 0; i < test.size(); i++)
	  {
		String str = test.get(i);
		int strLen = str.length() - 1;
		if (strLen < count) continue;
		sb.append(str.charAt(count));
	  }
	  verticalList[count++] = sb.toString();
	  sb.setLength(0);
	}
	for (int i = 0; i < verticalList.length; i++)
	{
	  System.out.println(verticalList[i]);
	}
  }

  public static int findMaxStringLength(List<String> strList)
  {
	int maxLength = 0;
	for (int j = 0; j < strList.size(); j++)
	{

	  if (strList.get(j).length() > maxLength) maxLength = strList.get(j).length();
	}
	return maxLength;
  }
}

Die Ausgabe lautet dann wie folgt:
HTML:
idee
cusr
he
dr
us
i
e

Wenn die Zeichenkette zu kurz ist wird sie einfach übersprüngen. Ansonsten wird solange über die ArrayList iteriert bis das letzte Zeichen der längsten Zeichenkette ausgelesen wurde.
 
Das syso war nur dazu gedacht um mir das zu verdeutlichen bin aber jetzt drauf gekommen, trotdem Danke. Hab das ganze so gelöst:

Java:
while (it.hasNext()) {
			String s = it.next();
			if (s.length() > 2)
				sb.append(s.charAt(2));
		}
 
Zurück