# Erstes Zeichen aus String löschen



## TimeIsTheKey (28. Nov 2010)

Hallo

Ich bin zurzeit an einem kleinen Projekt dran. Ich habe ein Textfile in dem meine Daten drinstehen und diese möchte ich alle einlesen und sortiert in ArrayListen speichern. Mein Problem ist das ich mir das so vorgestellt habe das vorne eine Zahl dran ist mit der man dann herausfindet was die entsprechende Zeile bedeutet. Hier ein Beispiel:


```
1Thema
2Unterthema
3Frage
3Frage
2Unterthema
3Frage
1Thema
2Unterthema
```

Die Zahlen benutze ich also im Klartext um herauszufinden was für ein String ich gerade vor mir habe. Mein Problem ist jetzt das ich nicht weiss wie ich die Zahl da wegbekomme, weil ich die nicht in der ArrayList speichern möchte. :autsch:
In Google finde ich nur wie ich das letzte Zeichen ändere (lenght()-1 ...), aber für das erste Zeichen finde ich nichts. Ich dachte da zuerst an die replace-Methode mit einer darauf folgenden trim-Methode, aber die geht in diesem Fall nicht, weil in einer Frage eine Zahl vorkommen kann und ich nicht möchte das die Zahlen aus der Frage verschwinden (z.B. mathematische Fragen oder auch Kapitelnamen). Ich hoffe ihr versteht mein Problem und könnt mir helfen 

Edit: Mir fällt gerade auf das ich mich da durchmogeln könnte und eine Zeichenreihe nehme die 100%-ig nicht in einer meiner Fragen oder so auftaucht. 

z.B. "^^~^^"

```
1^^~^^Thema
2^^~^^Unterthema
3^^~^^Frage
3^^~^^Frage
2^^~^^Unterthema
3^^~^^Frage
1^^~^^Thema
2^^~^^Unterthema
```

Ich könnte dann splitten, aber ich möchte das sauber lösen. Ist aber gut wenn ich da schonmal eine Notfalllösung parat habe ^^

MfG SurviveX


----------



## z-mon (28. Nov 2010)

Also wenn du nur das erste Zeichen eines Strings ignorieren möchtest könntest du mit einem substring(1) arbeiten ..!

Davon ab .. warum nutzt du keine Datenbank um deine Daten zu speichern?


----------



## XHelp (28. Nov 2010)

Das Vorgehen ist fragwürdig. Da würde ich die Sachen als XML oder so abspeichern. Das erspart die viel Stress. Und Java-Intern würde ich eine Datenstruktur erstellen.
Zu deiner Frage:

```
while (s.length() > 0 && Character.isDigit(s.charAt(0))) {
  s = s.substring(1);
}
```


----------



## Andi_CH (29. Nov 2010)

SurviveX hat gesagt.:


> Edit: Mir fällt gerade auf das ich mich da durchmogeln könnte und eine Zeichenreihe nehme die 100%-ig nicht in einer meiner Fragen oder so auftaucht.
> 
> z.B. "^^~^^"
> [snip]
> Ich könnte dann splitten, aber ich möchte das sauber lösen. Ist aber gut wenn ich da schonmal eine Notfalllösung parat habe ^^


So lange du nur einzelne Ziffern hast, ist ja alles klar (substring....), aber wenn du zwei- oder mehrstellig werden musst, brauchst du einen anderen Ansatz. (Es könnte ja auch sein dass dein "echter" String mit einer Ziffer beginnt ...)

Warum nicht mit ' ' (space) oder ',' (so a la CSV) trennen und immer beim ersten Auftreten dieses Characters splitten?

Was ich nicht ganz verstehe ist, warum du das als "unsauber" bezeichnest? Ich finde einen definierten Charater als Separator sauberer als sich auf die Anzahl Ziffern zu verlassen.


----------



## VfL_Freak (29. Nov 2010)

Moin,

wie zuvor schon angesprochen, hängt es IMHO vom möglichen Dateiinhalt ab!
Stehen am Anfang nur einstellige Zahlen oder können es auch mehrstellige sein?


```
// Index des ersten Zeichens, dass KEINE Ziffer ist!
int iIndex = 0;

for( int i = 0; i < s.length(); i++ )
{
    if( !Character.isDigit(s.charAt(i) )
    { 
        iIndex = i;       
        break;
    }
}

s = s.substring( iIndex );
```

Kann wirklich der Textteil mit einer Ziffer beginnen?
Dann wird es deutlich aufwendiger ....

Gruß
Klaus


----------



## Andi_CH (29. Nov 2010)

Ich neige dazu, alles möglichst allgemein zu lösen ;-) wobei logischerweise nicht immer der kompakteste Code entsteht ....

Äh  ist übrigens bald Weihnachten - soll ich dir eine Signatur schenken?


----------



## VfL_Freak (29. Nov 2010)

Moin,



Andi_CH hat gesagt.:


> Äh  ist übrigens bald Weihnachten - soll ich dir eine Signatur schenken?



au ja, das wäre prima :toll::applaus:
 :lol:

Gruß in die Schweiz
Klaus


----------



## TimeIsTheKey (29. Nov 2010)

Zunächst vielen Dank für die zahlreichen Antworten! Ich hätte nicht gedacht das so viele posten würden. 



z-mon hat gesagt.:


> Also wenn du nur das erste Zeichen eines Strings ignorieren möchtest könntest du mit einem substring(1) arbeiten ..!
> 
> Davon ab .. warum nutzt du keine Datenbank um deine Daten zu speichern?



Vielen Dank! Genau das suchte ich ^^ Jedem dem ich von meinem kleinen Mini-Java-Programm erzähle fragt mich wieso ich keine DB benutze. Das Programm soll als .zip-Datei verschickt werden können und sozusagen transportabel sein. Ich möchte nicht irgendetwas installieren oder so damit mein Programm läuft. 



XHelp hat gesagt.:


> Das Vorgehen ist fragwürdig. Da würde ich die Sachen als XML oder so abspeichern. Das erspart die viel Stress. Und Java-Intern würde ich eine Datenstruktur erstellen.
> Zu deiner Frage:
> 
> ```
> ...



Das Vorgehen ist durchaus fragwürdig, aber ich habe noch nicht sehr viel Erfahrung mit Java und finde es eigentlich noch ziemlich okay, weil Textdateien nicht so grosse Ressourcenfresser sind. Kann man in XML wirklich ein Array haben? Wo ist da der Vorteil gegenüber einem Textfile?



Andi_CH hat gesagt.:


> So lange du nur einzelne Ziffern hast, ist ja alles klar (substring....), aber wenn du zwei- oder mehrstellig werden musst, brauchst du einen anderen Ansatz. (Es könnte ja auch sein dass dein "echter" String mit einer Ziffer beginnt ...)
> 
> Warum nicht mit ' ' (space) oder ',' (so a la CSV) trennen und immer beim ersten Auftreten dieses Characters splitten?
> 
> Was ich nicht ganz verstehe ist, warum du das als "unsauber" bezeichnest? Ich finde einen definierten Charater als Separator sauberer als sich auf die Anzahl Ziffern zu verlassen.



Die Problematik taucht zum Glück nicht auf da ich nur einstellige Zahlen benutze. Ich würde es unsauber gelöst finden wenn ich mittels spezieller Characters splitten würde, weil dies mehr Ressourcen verbrauchen würde (mehr Methoden, String Array etc.) im Gegensatz zum substring. Natürlich bezeichnete ich dies nur als unsauber, weil ich vermutet hatte das sich dies mittels einer einfachen Methode lösen lässt. ^^"



VfL_Freak hat gesagt.:


> Moin,
> 
> wie zuvor schon angesprochen, hängt es IMHO vom möglichen Dateiinhalt ab!
> Stehen am Anfang nur einstellige Zahlen oder können es auch mehrstellige sein?
> ...



Zum Glück trifft das mit den mehrstelligen Zahlen nicht zu. ^^

Vielen Dank für euren Support :toll:


----------



## z-mon (29. Nov 2010)

SurviveX hat gesagt.:


> Vielen Dank! Genau das suchte ich ^^ Jedem dem ich von meinem kleinen Mini-Java-Programm erzähle fragt mich wieso ich keine DB benutze. Das Programm soll als .zip-Datei verschickt werden können und sozusagen transportabel sein. Ich möchte nicht irgendetwas installieren oder so damit mein Programm läuft.



Für diesen Fall gibt es auch eine HSQLDB. Ist ein embedded Datenbanksystem was ohne weiteres portablefähig ist ^^

im Java HSQLDB (HyperSQL) Tutorial findest du eine konkrete Vorgehensweise.

Grüße


----------

