StringBuilder tehokkaaseen yhdistämiseen
Käytä StringBuilderia merkkijonojen tehokkaaseen rakentamiseen silmukoissa ja monimutkaisessa muotoilussa.
StringBuilder tehokkaaseen yhdistämiseen on ilmainen Java Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Java Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Java Academy-kurssilla on yhteensä 4 oppituntia.
StringBuilder tehokkaaseen yhdistämiseen
StringBuilder on muuttuva vaihtoehto String-oliolle tekstin rakentamiseen vaiheittain. Se välttää useiden väliaikaisten String-olioiden luomisen.
StringBuilder verrattuna merkkijonojen yhdistämiseen
Kun useita merkkijonoja yhdistetään, erityisesti silmukoissa, StringBuilder on huomattavasti nopeampi, koska se muuttaa sisäistä merkkipuskuria uusien olioiden luomisen sijaan.
// Inefficient: creates a new String every iteration
String result = "";
for (int i = 0; i < 1000; i++) {
result += i + ","; // 1000 new String objects!
}
// Efficient: StringBuilder uses a resizable char buffer
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000; i++) {
sb.append(i).append(',');
}
String efficient = sb.toString(); // one final String createdStringBuilder-ohjelmointirajapinta
Tärkeimmät metodit: append, insert, delete, replace, reverse, toString, length, charAt, setCharAt.
StringBuilder sb = new StringBuilder("Hello");
sb.append(", World"); // Hello, World
sb.insert(5, "!"); // Hello!, World
sb.delete(5, 6); // Hello, World
sb.replace(7, 12, "Java"); // Hello, Java
sb.reverse(); // avaJ ,olleH
sb.reverse(); // Hello, Java
System.out.println(sb); // Hello, Java
System.out.println(sb.length()); // 11
System.out.println(sb.charAt(0)); // Happend-kutsujen ketjuttaminen
Kaikki append- ja muut muuttavat metodit palauttavat this-arvon, mikä mahdollistaa sujuvan metodiketjutuksen.
StringBuilder html = new StringBuilder()
.append("<div class=\"card\">")
.append("<h2>").append("Product Title").append("</h2>")
.append("<p>Price: $").append(String.format("%.2f", 29.99)).append("</p>")
.append("<button>Add to Cart</button>")
.append("</div>");
System.out.println(html.toString());Alkuperäinen kapasiteetti
Alustakaa StringBuilder odotetulla kapasiteetilla, jotta sisäisen taulukon kokoa ei tarvitse muuttaa ja suurten merkkijonojen käsittely tehostuu.
// Default capacity: 16 chars
StringBuilder small = new StringBuilder();
// Pre-sized: 10 items * ~50 chars each
StringBuilder report = new StringBuilder(500);
for (int i = 1; i <= 10; i++) {
report.append(String.format("%-3d. Record %04d: processed OK%n", i, i));
}
System.out.println(report.toString().substring(0, 30));
// " 1. Record 0001: processed OK"deleteCharAt ja kohdennetut poistot
deleteCharAt poistaa yhden merkin. delete(start, end) poistaa merkkialueen. Nämä operaatiot ovat O(n), koska taulukon sisältöä siirretään.
StringBuilder sb = new StringBuilder("Hello, World!");
sb.deleteCharAt(5); // removes comma: "Hello World!"
sb.delete(5, 6); // removes space: "HelloWorld!"
System.out.println(sb); // HelloWorld!
// Replace to fix a typo
StringBuilder typo = new StringBuilder("Helo, Java!");
typo.replace(typo.indexOf("Helo"), typo.indexOf("Helo") + 4, "Hello");
System.out.println(typo); // Hello, Java!CSV-tiedoston rakentaminen
Käytännöllinen ohjelmointimalli: CSV-rivin rakentaminen StringBuilderilla ja erottimien asianmukainen käsittely.
import java.util.List;
static String toCsv(List<String> values) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < values.size(); i++) {
if (i > 0) sb.append(',');
sb.append(escapeCsv(values.get(i)));
}
return sb.toString();
}
static String escapeCsv(String s) {
if (s.contains(",") || s.contains("\""))
return "\"" + s.replace("\"", "\"\"") + "\"";
return s;
}
System.out.println(toCsv(List.of("Alice", "Smith, Jr.", "30")));
// Alice,"Smith, Jr.",30StringJoiner erotinmerkillä erotettuun tulosteeseen
StringJoiner helpottaa alkioiden yhdistämistä erottimen sekä valinnaisen alku- ja loppuosan avulla — erottimia ei tarvitse käsitellä manuaalisesti.
import java.util.StringJoiner;
StringJoiner sj = new StringJoiner(", ", "[", "]");
sj.add("Alice");
sj.add("Bob");
sj.add("Charlie");
System.out.println(sj.toString()); // [Alice, Bob, Charlie]
// Equivalent with String.join
String joined = String.join(", ", "Alice", "Bob", "Charlie");
System.out.println(joined); // Alice, Bob, Charlie
// Streams: collect with joining collector
import java.util.stream.*;
List.of("a", "b", "c").stream()
.collect(Collectors.joining(", ", "(", ")"));
// (a, b, c)StringBuilder verrattuna StringBufferiin
StringBuffer on StringBuilderin säieturvallinen ja synkronoitu versio. Se on lukituksen vuoksi hitaampi. Käyttäkää StringBuilderia yksisäikeisissä tilanteissa, joita on valtaosa tapauksista.
// StringBuffer: thread-safe but slower (synchronized methods)
StringBuffer buf = new StringBuffer();
buf.append("Thread-safe");
buf.append(" but slow");
// StringBuilder: not thread-safe but faster
StringBuilder sb = new StringBuilder();
sb.append("Fast");
sb.append(" single-threaded");
// When to use StringBuffer:
// - Multiple threads write to the same buffer
// - Almost always a design smell — redesign to avoid sharingKäänteinen merkkijono ja palindromin tarkistus
StringBuilderin sisäänrakennettu reverse()-metodi tekee palindromien tarkistamisesta eleganttia.
static boolean isPalindrome(String s) {
String cleaned = s.toLowerCase()
.replaceAll("[^a-z0-9]", ""); // remove non-alphanumeric
String reversed = new StringBuilder(cleaned).reverse().toString();
return cleaned.equals(reversed);
}
System.out.println(isPalindrome("A man, a plan, a canal: Panama")); // true
System.out.println(isPalindrome("race a car")); // false
System.out.println(isPalindrome("Was it a car or a cat I saw?")); // trueKäytännön esimerkki: SQL-kyselyiden rakentaja
Dynaamisen SQL-kyselyn rakentaminen StringBuilderilla siten, että ehtolausekkeet lisätään tarpeen mukaan.
static String buildQuery(String category, Double minPrice, Double maxPrice) {
StringBuilder sql = new StringBuilder("SELECT * FROM products WHERE 1=1");
if (category != null)
sql.append(" AND category = '" + category + "'");
if (minPrice != null)
sql.append(" AND price >= ").append(minPrice);
if (maxPrice != null)
sql.append(" AND price <= ").append(maxPrice);
sql.append(" ORDER BY name");
return sql.toString();
}
System.out.println(buildQuery("Electronics", 50.0, null));
// SELECT * FROM products WHERE 1=1 AND category = 'Electronics' AND price >= 50.0 ORDER BY namePikatarkistus
Miksi merkkijonojen yhdistäminen +-operaattorilla on tehotonta silmukoissa?
Kertaus: StringBuilder tehokkaaseen yhdistämiseen
Tärkeimmät asiat:
- StringBuilder on muuttuva — append, insert ja delete muuttavat sisäistä puskuria
- Käyttäkää StringBuilderia silmukoissa välttääksenne O(n²)-aikavaativuuden merkkijonojen luonnissa
- Kaikki muuttavat metodit palauttavat this-arvon, mikä mahdollistaa sujuvan metodiketjutuksen
- Alustakaa StringBuilder odotetulla kapasiteetilla sisäisen koon muuttamisen vähentämiseksi
- StringJoiner ja String.join ovat käteviä erottimella erotettuun tulosteeseen
- StringBuffer on synkronoitu eli säieturvallinen, mutta hitaampi vaihtoehto
Opi Java tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 104
- Oppitunnit
- 374
Usein kysytyt kysymykset
Onko oppitunti ”StringBuilder tehokkaaseen yhdistämiseen” ilmainen?
Kyllä – oppitunnin ”StringBuilder tehokkaaseen yhdistämiseen” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Java Academy-kurssin, päivitä CoddyKit PROhon. Java Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”StringBuilder tehokkaaseen yhdistämiseen”?
Käytä StringBuilderia merkkijonojen tehokkaaseen rakentamiseen silmukoissa ja monimutkaisessa muotoilussa. Harjoittelet Java Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Java Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Java Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”StringBuilder tehokkaaseen yhdistämiseen”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Java Academy-oppitunnilla?
Kyllä. Jokainen Java Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- String-tyypin muuttumattomuus ja String Pool
- StringBuilder tehokkaaseen yhdistämiseen
- Tekstilohkot ja String.format
- Säännölliset lausekkeet Pattern- ja Matcher-luokilla