Skocz do zawartości
  • 0

String z wieloma argumentami


KGaZ
 Udostępnij

Pytanie

Witam , dopiero zaczynam z tym programowaniem itp.

Ale nie radze sobie z pluginem na kick

					if(Bukkit.getPlayer(args[0]) !=null){
						Player r = Bukkit.getPlayer(args[0]);
						String powod = args[1];
						String gracz = ((Player) sender).getPlayer().getDisplayName();
						powod = powod.replaceAll("&", "§");
						powod = powod.replaceAll(" ", " ");
						String kicked = args[0];
						r.kickPlayer("§f§m-------------------------------------- \n§eZosales wyrzucony z serwera!\n§6»§f Wyrzucil:§a " + gracz +"\n§6»§f Powod:§a " + powod + "\n§fZapraszamy do ponownego wejscia na serwer\nI nie sprawiania wiecej problemow!\n §f§m--------------------------------------");
						Bukkit.broadcastMessage("§7[§3§lHC§f§l2§b§lU§7]§c " + gracz + "§7 wyrzucil§c " + kicked + "§7 za§c " + powod + "§7!");
						return true;

Chodzi mi o to że jak mam zapełnione oba argumenty gracz i jedno słowo to drugie już mi się zalicza jako argument 3

A chce żeby to podlegało pod jeden argument

Źle trochę to wytłumaczyłem ale niezbyt ogarniam

Odnośnik do komentarza
Udostępnij na innych stronach

1 odpowiedź na to pytanie

Rekomendowane odpowiedzi

  • 0

Otóż parametry, czy też argumenty w komendach podawane są jako tablica String. Tablica jest taką jakby listą, gdzie tutaj podawany jest ciąg znaków. Jest to więc lista ciągów znaków. Teraz pobieramy z niej informacje; pierwszym Stringiem jest nick gracza (powinniście sprawdzać czy ten Player r jest online). Następne Stringi powinny zostać zjednoczone w jeden string (przy czym każdy z nich powinien zostać oddzielony znakiem spacji). Można to zrobić następująco w czystej Javie:

public String uniteStrings(String[] strings) {
    // Na początku tworzymy nowego "budowniczego" naszego Stringa. Do tego
    // budowniczego będziemy podawać kolejne Stringi z naszej tablicy.
    // Ostatecznie pobierzemy z niego gotowy String
    StringBuilder builder = new StringBuilder();

    // Robimy pętlę przez prawie wszystkie Stringi w tablicy. W Javie zawsze
    // liczymy od zera, ale tutaj robimy wyjątek. Wszystko przez to, że pierwszy
    // argument w naszej tablicy jest nickiem gracza, który chcemy wyrzucić.
    // Zaczynamy więc od 2 argumentu, a więc od 1 (bo liczymy od 0, więc
    // odejmujemy 1).
    for (int i = 1; i < strings.length; i++) {

        // Kod wewnątrz tego for wykona się za każdym razem, gdy w tej tablicy
        // będzie się znajdować kolejny argument. Jeżeli wykonamy komendę
        // "/kick TheMolkaPL Hello world!", to TheMolkaPL pominiemy, bo
        // zapętlamy od drugiego argumentu (patrz wyżej). Następnie kod wewnątrz
        // tego for wykona się 2 razy. Pierwszy raz dla "Hello", a następnie dla
        // "world!"
        String string = strings[i];

        // No dobrze mamy już ten String. Moglibyśmy dodać go już to tego
        // StringBuildera na początku, ale nie możemy zapomnieć, że argumenty
        // muszą być oddzielone znakiem spacji! Przecież nie chcemy powodu o
        // treści "HelloWorld!", tylko "Hello world!". W tym celu musimy
        // sprawdzić czy właśnie zapętlamy przez pierwszy String w tej tablicy.
        // Jeżeli tak, to wstawiamy go do StringBuildera jak jest, jeżeli nie to
        // przez dodaniem go tam dodajemy najpierw znak spacji. Dzięki temu
        // kolejne argumenty powodu (nie licząc tego pierwszego) będą
        // poprzedzone znakiem spacji. I znowu uwaga! Jak już wcześniej
        // wspomniałem, w Javie liczymy od zera, powinno być tu w takim razie 0,
        // natomiast w pierwszym Stringu mamy nick gracza, którego tutaj nie
        // chcemy!
        if (i == 1) {
            builder.append(string);
        } else {
            // "if ... else" - czyli - "jeżeli ... w innym przypadku". Kod
            // wewnątrz "if" wykona się jeżeli if zostanie spełniony, kod
            // wewnątrz "else" wykona się jeżeli ten wcześniejszy "if" nie
            // zostanie spełniony. Tak więc ten kod wykona się jeżeli nie jest
            // to pierwszy argument w powodzie. W takim wypadku najpierw
            // dodajemy spacje, potem String.
            builder.append(" ");
            builder.append(string);
        }
    }

    // Na koniec zwracamy gotowy String z tego StringBuildera.
    return builder.toString();
}

 

Kod który wyżej podałem jest uproszczony. Ma problem powtarzania linijki "builder.append(string);" Dla kogoś takiego jak ja powinien wyglądać następująco:

// Jeżeli i nie jest równe 1, != jest negacją, czyli zaprzeczeniem do ==. ==
// znaczy "jest równe", a więc != znaczy "nie jest równe". Krótko mówiąc, jeżeli
// zmienna i nie jest równa 1. A więc wykonaj kod wewnątrz tego ifa, jeżeli nie
// jest to pierwszy String z tych argumentów powodu.
if (i != 1) {
    builder.append(" ");
}

// Zawsze! Zawsze dodajemy String który właśnie zapętlamy!
builder.append(string);

 

Dzisiaj powstały biblioteki, które upraszczają tego typu działania. Mamy przykładowo bibliotekę Apache Commons Lang, która jest już zaimplementowana w Bukkicie. Dzięki temu wystarczy użyć:

StringUtils.join(args, " ", 1, args.length());

 

To znaczy - połącz Stringi z "args", oddziel je znakiem spacji " ", zacznij od 1 (czyli pomiń nick gracza) i zakończ na końcu tej tablicy.

 

Pozdrawiam Czerwono!

Edytowane przez TheMolkaPL
Odnośnik do komentarza
Udostępnij na innych stronach

Nieaktywny
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
 Udostępnij

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...