# String - Aufgabe mit Array(Zeichen liefern)



## canyakan95 (1. Nov 2015)

hallo meine aufgabe ist es:
public static String liefereZeichen(String str, int[] feld),
die aus dem String str schrittweise die Buchstaben ausliest, die im Array feld angegeben werden, und als String zurückliefert. Sie können dabei davon ausgehen, dass die Zahlen in feld aufsteigend sortiert sind.
Die Rückgabe für
liefereZeichen("Dies ist ein Test", new int[]{1,5,6,8})
ist somit der String "D it".
Beachten Sie, dass zum Beispiel die 1 im Array sich auf den ersten Buchstaben des Strings bezieht, hier also das "D", die 5 auf den 5-ten Buchstaben, hier also das " " etc.

ich habe das zwar programmiert,aber bei mir ist der erste buchstabe bei 0 und die leerzeichen werden nicht bei mir als ein string aufgefasst.

```
public static String liefereZeichen(String str, int[]feld)
    {
        String s="";
        for(int i=0;i<feld.length;i++)
        {
            s+=str.charAt(feld[i]);
        }
       
        return s;
    }
```

und für das oben stehende beispiel bekomme ich als ausgabe raus : "iis"  und nicht "D it"


----------



## Tarrew (1. Nov 2015)

Der erste Buchstabe ist praktisch an der 0. Stelle und so weiter.
Also:

```
s+=str.charAt(feld[i]-1);
```


----------



## canyakan95 (1. Nov 2015)

hallo
kannst du mir dann auch hier bei helfen ist fast die selbe aufgabe muss aber die zeichen löschen .
weis aber leider nicht , wie ich das entfernen hier implementieren soll.

Aufgabe:
Implementieren Sie die Methode
public static String entferneZeichen(String str, int[] feld),
die aus dem String str die Buchstaben entfernt, die im Array feld angegeben werden, und das Ergebnis als String zurückliefert. Sie können dabei davon ausgehen, dass die Zahlen in feld aufsteigend sortiert sind.
Beispiel:
Die Rückgabe für
entferneZeichen("Dies ist ein Test", new int[]{1,5,6,8})
ist somit der String "iess ein Test ".

Hier mein code:

```
public static String entferneZeichen(String str, int []feld)
    {
        String s="";
        for(int i=0;i<feld.length;i++)
        {
            if(feld[i]!=str.charAt(feld[i]))
            {
                s+=str.charAt(feld[i]-1);
            }
        }
        return s;
    }
```


----------



## Tarrew (1. Nov 2015)

Da fallen mir spontan zwei Möglichkeiten ein.
Die erste wäre die substring-Methode.
zB:

```
String s = "Test";  
        int position = 3;
        System.out.println(s.substring(0, position-1) + s.substring(position));
```

Alternativ mit einem StringBuilder:

```
StringBuilder sb = new StringBuilder("Test");
        int position = 3;
        sb.deleteCharAt(position-1);
        System.out.println(sb.toString());
```


----------



## canyakan95 (1. Nov 2015)

ich muss ja aber insgesamt 4 zeichen löschen.
wie soll das dann gehen und das muss schon mit der aufgabe zu tun haben.
mfg


----------



## Tarrew (1. Nov 2015)

Ein bisschen musst du ja auch selber machen.
Ich hab dir gezeigt wie man ein Zeichen löscht.
Da baust du dann einfach eine for-Schleife drum, durchläufst einmal dein Array und löscht immer das passende Zeichen


----------



## John Cena (16. Jan 2016)

```
public class Test
{
    public static void main (String[] args)
    {
        System.out.println(entferneZeichen("Dies ist ein Test", new int[]{1,5,6,8}));
    }

    public static String entferneZeichen(String str, int []feld)
    {
        String s = "";

            for (int i = 0; i < str.length(); i++)
                boolean eintragen = true;

            for (int j = 0; j < feld.length; j++)
            {
                  if (j == feld[j])
                    eintragen = false;

                  else if (eintragen)
                    s += str.charAt(j) ;
            }
        return s;
    }
}
```
Hey!
Ich weiß dieser Post ist schon etwas her, aber ich muss zufällig die gleiche Aufgabe erledigen, wo man aus einem String bestimmte Buchstaben entfernen soll. Ich wollte jetzt kein neues Thema erstellen und hoffe einer kann mir helfen, warum mein Code nicht klappen will. Vielen Dank im Vorraus!


----------



## Joose (16. Jan 2016)

John Cena hat gesagt.:


> warum mein Code nicht klappen will. Vielen Dank im Vorraus!



"nicht klappen will" ist keine Fehlerbeschreibung.
Was für ein Ergebnis erwartest du dir? Was für ein Ergebnis bekommst du?


----------



## John Cena (16. Jan 2016)

Hallo,

vielen Dank erst einmal für deine Antwort! Wenn ich mein Programm ausgebe kommt da : "Dies ist ein TestDies" raus. Aber eigentlich müsste da "iess ein Test" rauskommen. Die Buchstaben sollten an den Stellen 1,5,6,8 gelöscht werden und das neue Wort soll ausgegeben werden.
Mfg

John Cena


----------



## Bitfehler (16. Jan 2016)

Zu dieser Aufgabe fallen mir spontan zwei Ansätze ein.

Man löscht die Zeichen an den geforderten Positionen, so wie es bereits weiter oben beschrieben ist. Dafür läuft man durch das Array, am Besten von hinten nach vorne, und "schneidet" die nicht gewünschten Buchstaben aus der Zeichenkette aus.
Man behält alle gewünschten Zeichen. Dazu muss man über die Zeichenkette laufen, so wie du das vorhast. Innerhalb dieser Schleife wird dann noch eine Schleife über das Array benötigt. Innerhalb der zweiten Schleifen wirst du folgenden Vergleich brauchen:

```
if (i == (feld[j]-1)){
                        eintragen = false;
                        break;
                      }
```
Abschließend prüft du in der äußeren Schleife, ob das Zeichen verwendet werden soll. Das kannst du so machen wie du es bereits tust, abgesehen davon das du die verwendete Variable von j auf i ändern musst.


----------



## John Cena (16. Jan 2016)

```
public static String entferneZeichen(String str, int []feld)
    {
        String s = "";

            for (int i = 0; i < str.length(); i++)
            {

                boolean eintragen = true;

            for (int j = 0; j < feld.length; j++)
            {
                  if (i == (feld[j]-1))
                    eintragen = false;
            }
                   if (eintragen)
                    s += str.charAt(i) ;
            }
        return s;
    }
```

Guten Abend,

vielen Dank für deine Hilfe! Ich habe versucht deine Hinweise zu berücksichtigen und hab dieses mal "Des tein Test" rausbekommen. Ich hab auch das break mal reingeschrieben, das hat aber leider auch nicht zum richtigen Ergebnis geführt.


----------



## Tarrew (16. Jan 2016)

Also wenn ich das ausführe kommt da dein erwartetes "iess ein Test" raus:


----------



## John Cena (16. Jan 2016)

Hallo,

da hast du Recht bei mir kommt auch dieses mal das richtige raus! Ich hab mich wohl verguckt. Vielen Dank für eure Hilfen, ich war echt am verzweifeln!
Schönen Abend noch!


----------



## Bitfehler (16. Jan 2016)

Sicherheitshalber hier der Code.


```
public static void main (String[] args)
    {
     System.out.println(entferneZeichen("Dies ist ein Test", new int[]{1,5,6,8}));
    }

    public static String entferneZeichen(String str, int []feld)
    {
        String s = "";

            for (int i = 0; i < str.length(); i++){
                boolean eintragen = true;

                for (int j = 0; j < feld.length; j++)
                {
                    if (i == (feld[j]-1)){
                        eintragen = false;
                        break;
                      }
                }
                if(eintragen){
                    s += str.charAt(i) ;
                }
            }
        return s;
    }
```


----------



## John Cena (16. Jan 2016)

Danke Bitfehler!  Und natürlich danke nochmal an all die anderen!


----------

