09 - Darbs ar Virknēm
Galvenā teksta manipulācija un virknes operācijas Javā.
Virknes(String) ir viens no visbiežāk izmantotajiem tipiem Java. Tie ir būtiski, lai apstrādātu spēlētāju vārdus, čata ziņojumus, aprakstus un visu, kas izlasāms.
Virknes Pamati
String ir objekti, kas glabā tekstu:
String vards = "Simon";
String zina = "Sveicināts Hytale!";
String tukss = "";Pēc izveidošanas virkne ** nevar tikt mainīta** Metodes, kas modificē virknes, īstenībā izveido jaunas virknes!
String teksts = "Sveiki";
teksts.uzLieliemBurtiem(); // Izveido "HELLO" bet nesaglabā
System.out.println(teksts); // Joprojām "Hello"
String lielieBurti = teksts.uzLieliemBurtiem(); // ✓ Saglabā rezultātu
System.out.println(lielieBurti); // "HELLO"Virknes Metodes
Garums
String vards = "Alice";
int garums = vards.garums();
System.out.println(garums); // 5Burtu Maiņa
String teksts = "Hello World";
String lieliem = text.uzLieliemBurtiem(); // "HELLO WORLD"
String maziem = text.uzMaziemBurtiem(); // "hello world"Satura Apskatīšana
String zinojums = "Sveicināts Hytale";
boolean irHytale = message.contains("Hytale"); // true
boolean irMinecraft = message.contains("Minecraft"); // false
boolean vaiSakas = message.startsWith("Sveicināts"); // true
boolean vaiBeidzas = message.endsWith("Hytale"); // trueDaļu Nolasīšana
String teksts = "Hello World";
char pirmais = text.charAt(0); // 'H'
char pedejais = text.charAt(10); // 'd'
String apVirkne1 = teksts.substring(0, 5); // "Hello"
String apVirkne2 = teksts.substring(6); // "World"substring(start, end) iekļauj start bet izņem end
String teksts = "Hytale";
// 012345 (indeksi)
text.substring(0, 2); // "Hy" (indeksē 0 un 1)
text.substring(2, 6); // "tale" (indeksē 2, 3, 4, 5)
text.substring(2); // "tale" (no 2 līdz galam)Teksta Aizvietošana
String teksts = "Es Mīlu Minecraft";
String aizvietots = teksts.replace("Minecraft", "Hytale");
System.out.println(aizvietots); // "Es Mīlu Hytale"
String bezAtstarpes = "Hello World".replace(" ", "");
System.out.println(bezAtstarpes); // "HelloWorld"Atstarpju Apgriešana
String nekartigs = " Hello World ";
String satirits = nekartigs.trim();
System.out.println(satirits); // "Hello World" (galā nav liekas atstarpes)Virknes Saskaldīšana
String komanda = "iedot speletajam zobenu 5";
String[] dalas = komanda.split(" ");
System.out.println(dalas[0]); // "iedot"
System.out.println(dalas[1]); // "speletajam"
System.out.println(dalas[2]); // "zobenu"
System.out.println(dalas[3]); // "5"Virkņu Salīdzināšana
Vienmēr izmanto .equals(), lai salīdzinātu saturu!
String vards1 = "Steve";
String vards2 = "Steve";
// Nepareizi - Salīdzina objektu references
if (vards1 == vards2) {
System.out.println("Vienādi");
}
// Pareizi - Salīdzina reālo tekstu
if (vards1.equals(vards2)) {
System.out.println("Vienādi");
}
// Ignorē burtu lielumu, kad salīdzinam
if (vards1.equalsIgnoreCase("steve")) {
System.out.println("Vienādi (ignorējot lielos burtus)");
}Salīdzinājuma Secība
String a = "Ābols";
String b = "Banāns";
int rezultats = a.compareTo(b);
// rezultats < 0 ja a nāk pirms b
// rezultats == 0 ja a equals b
// rezultats > 0 ja a comes after b
if (a.compareTo(b) < 0) {
System.out.println(a + " comes before " + b);
}Virknes Apvienošana
Izmantojot + Operātoru
String pirmais = "Hello";
String otrais = "World";
String kombinets = pirmais + " " + otrais; // "Hello World"
int punkti = 100;
String zinojums = "Punkti: " + punkti; // "Punkti: 100"Izmantojot concat()
String rezultats = "Hello".concat(" World"); // "Hello World"Garas Virknes Veidošana
Ja jāapvieno vairākas virknes, izmanto StringBuilder
StringBuilder salikts = new StringBuilder();
salikts.append("Speletajs: ");
salikts.append("Alice");
salikts.append(", Limenis: ");
salikts.append(10);
salikts.append(", Dzivibas: ");
salikts.append(100);
String rezultats = salikts.toString();
System.out.println(rezultats);
// "Speletajs: Alice, Limenis: 10, Dzivibas: 100"Parasti saliekot veidojas vairākas pagaidu virknes:
// Nav efektīvi - Veidojot vairākas virknes
String rezultats = "";
for (int i = 0; i < 1000; i++) {
rezultats = rezultats + i; // Izveidos 1000 pagaidu virknes!
}
// Efektīvi - StringBuilder ir pārveidojams
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000; i++) {
sb.append(i); // Modificē vienu objektu
}
String rezultats = sb.toString();Izmanto StringBuilder, kad veido virknes ciklus!
Praktiski Piemēri
Parsēt Spēlētāja Komandu
public class KomandasParsetajs {
public static void parsetKomandu(String komanda) {
// "/iedot Steve dimanta_zobens 1"
String[] dalas = komanda.split(" ");
String darbiba = dalas[0].replace("/", ""); // "iedot"
String speletajs = dalas[1]; // "Steve"
String prieksmets = dalas[2]; // "dimanta_zobens"
int daudzums = Integer.parseInt(dalas[3]); // 1
System.out.println("Darbiba: " + darbiba);
System.out.println("Spēlētājs: " + speletajs);
System.out.println("Priekšmets: " + prieksmets);
System.out.println("Daudzums: " + daudzums);
}
public static void main(String[] args) {
parsetKomandu("/iedot Steve dimanta_zobens 1");
}
}Formatē Spēlētāja Displejvārdu
public class SpeletajaFormators {
public static String formateVardu(String vards, int limenis, String rangs) {
StringBuilder formatets = new StringBuilder();
if (rank != null && !rank.isEmpty()) {
formatets.append("[").append(rank).append("] ");
}
formatets.append(vards);
formatets.append(" (Lv. ").append(limenis).append(")");
return formatets.toString();
}
public static void main(String[] args) {
String paradit1 = formateVardu("Alice", 10, "VIP");
System.out.println(paradit1); // "[VIP] Alice (Lv. 10)"
String paradit2 = formateVardu("Bob", 5, null);
System.out.println(paradit2); // "Bob (Lv. 5)"
}
}Pārbaudi Lietotājvārdu
public class LietotajvardaParbauditajs {
public static boolean irDerigs(String lietotajvards) {
// Noteikumi: 3-16 rakstzīmes. tikai burti un skaitļi
if (lietotajvards == null || lietotajvards.isEmpty()) {
return false;
}
lietotajvards = lietotajvards.trim();
if (lietotajvards.length() < 3 || lietotajvards.length() > 16) {
return false;
}
for (int i = 0; i < lietotajvards.length(); i++) {
char c = lietotajvards.charAt(i);
if (!Character.isLetterOrDigit(c)) {
return false;
}
}
return true;
}
public static void main(String[] args) {
System.out.println(irDerigs("Steve")); // true
System.out.println(irDerigs("Player_123")); // false (dēļ apakšstrīpas)
System.out.println(irDerigs("ab")); // false (par īsu)
System.out.println(irDerigs("")); // false (tukšs)
}
}Priekšmeta Apraksta Veidotājs
public class prieksmetaApraksts {
public static String buvetAprakstu(String nosaukums, String vertiba,
int speks, int izturiba) {
StringBuilder apraksts = new StringBuilder();
// Tituls ar Vērtības krāsu kodu
apraksts.append(getVertibasKrasu(vertiba));
apraksts.append(nosaukums);
apraksts.append("\n");
// Statistika
apraksts.append("Spēks: ").append(speks).append("\n");
apraksts.append("Izturība: ").append(izturiba).append("/");
apraksts.append(izturiba).append("\n");
apraksts.append("Vērtība: ").append(vertiba);
return apraksts.toString();
}
private static String getVertibasKrasu(String vertiba) {
switch (rarity.toLowerCase()) {
case "leģendārs": return "§6"; // Zelts
case "episks": return "§5"; // Violets
case "rets": return "§9"; // Zils
case "nerets": return "§f"; // Balts
default: return "§7"; // Pelēks
}
}
public static void main(String[] args) {
String apraksts = buvetAprakstu("Excalibur", "Leģendārs", 50, 1000);
System.out.println(apraksts);
}
}Čata Ziņu Filtrs
public class CataFiltrs {
private static String[] bloketieVardi = {"SliktaisVārdiņš1", "SliktaisVārdiņš2"};
public static String filtretZinojumu(String zinojums) {
String filtrets = zinojums.toLowerCase();
for (String vards : bloketieVardi) {
if (filtrets.contains(vards)) {
String aizvietojums = "*".repeat(vards.length());
filtrets = filtrets.replace(vards, aizvietojums);
}
}
return filtrets;
}
public static void main(String[] args) {
String zinojums = "Šis ir SliktaisVārdiņš1 tests";
String tirs = filtretZinojumu(zinojums);
System.out.println(tirs); // "Šis ir ************ tests"
}
}Virknes Formatēšana
String.format() izmantošana
String vards = "Alice";
int limenis = 10;
double dzivibas = 85.5;
String formatets = String.format("%s ir %d līmenī ar %.1f%% dzīvības",
vards, limenis, dzivibas);
System.out.println(formatets);
// "Alice ir 10 līmenī ar 85.5% dzīvības"Biežākie formāta kodi:
%s- Virkne%d- Skaitlis%f- Peldošā punkta skaitlis vai decimālskaitlis%.2f- Peld. punkta vērtība ar 2 decimālskaitļiem aiz punkta%n- Jauna līnija (neatkarīgi no platformas)
String.format("Vārds: %s", "Steve"); // "Vārds: Steve"
String.format("Līmenis: %d", 10); // "Līmenis: 10"
String.format("Dzīvības: %.1f", 85.5); // "Dzīvības: 85.5"
String.format("Pozīcija: (%d, %d, %d)",
10, 64, -5); // "Pozīcija: (10, 64, -5)"Biežas Virknes Operācijas
Pārbaudi vai virkne ir Tukša
String teksts = "";
// pārbaudi vai ir tukšs vai null
if (text == null || text.isEmpty()) {
System.out.println("Tukšs!");
}
// Pārbaudi vai ir tukšs, null, vai atstarpe
if (text == null || text.trim().isEmpty()) {
System.out.println("Tukšs vai tikai atstarpe!");
}Gadījumu Skaitīšana
public static int skaititGadijumus(String teksts, String merkis) {
int skaits = 0;
int indekss = 0;
while ((indekss = teksts.indexOf(merkis, indekss)) != -1) {
skaits++;
indekss += merkis.length();
}
return skaits;
}
// Izmantošana
int count = countOccurrences("hello hello world", "hello");
System.out.println(count); // 2Virknes Apvēršana
public static String apverst(String teksts) {
StringBuilder sb = new StringBuilder(teksts);
return sb.reverse().toString();
}
// Izmantošana
String apversts = reverse("Sveiki");
System.out.println(apversts); // "ikievS"Pārbaudi, vai Palindroms
public static boolean irPalindroms(String teksts) {
String satirits = text.toLowerCase().replaceAll("[^a-z0-9]", "");
String apversts = new StringBuilder(satirits).reverse().toString();
return satirits.equals(apversts);
}
// Izmantošana
System.out.println(irPalindroms("racecar")); // true
System.out.println(irPalindroms("sveiki")); // falsePraktiskie Piemēri
-
Lietotājvārda pārbaudītājs: Uzrakstiet metodi, kas pārbauda, vai lietotājvārds:
- Ir no 3 līdz 16 rakstzīmēm
- Satur tikai burtus, ciparus un pasvītrojumus
- Nesākas ar skaitli
- Atgriež true, ja tas ir derīgs, pretējā gadījumā false
-
Komandu parsētājs: Parsē šo komandas formātu: '/teleport x y z'
- Koordinātu izvilkšana
- Konvertē uz veseliem skaitļiem
- Atgriez trīs vērtības no masīva (array)
-
Tērzēšanas formatētājs: izveido metodi, kas formatē tērzēšanas ziņojumus:
- Ievade: spēlētāja vārds, rangs, ziņojums
- Izvade:
"[RANGS] SpēlētājaVārds: ziņojums" - Ja nav ranga, vienkārši parādiet
"SpēlētājaVārds: ziņojums"
-
Vārdu skaitītājs: saskaita cik vārdu ir teikumā (vārdi ir atdalīti ar atstarpēm)
-
Lielie burti Virsrakstiem: virknes konvertēšana uz virsrakstiem:
- Ievadi:
"hello world" - Izvadi:
"Hello World"
- Ievadi: