


Ersetzen Sie Zeichen in Zeichenfolgen an bestimmten Positionen in Java: Von gepunkteten Linien bis zu bestimmten Markern
EINLEITUNG: Die Anforderung für den String -spezifischen Positionsersatz
In der Softwareentwicklung wird häufig festgestellt, dass Zeichenfolgen in einem bestimmten Muster generiert werden müssen und Zeichen an einer bestimmten Position ändern müssen. Generieren Sie beispielsweise eine Zeichenfolge (...) und ersetzen Sie dann eine davon durch andere Zeichen (wie #) an der angegebenen Position und haben einen ähnlichen Effekt wie ... #.... Diese Anforderung ist in Befehlszeilenwerkzeugen, Fortschrittsleistenanzeige oder einfacher Textformatierung sehr häufig. In diesem Tutorial wird untersucht, wie diese Funktionalität elegant und effizient in Java implementiert werden kann.
Erster Versuch mit StringBuilder
Für die String -Modifikation ist die String -Klasse in Java unveränderlich, was bedeutet, dass ihre Inhalte nach dem Erstellen nicht geändert werden können. Wenn Sie also eine Zeichenfolge ändern müssen, verwenden Sie normalerweise die StringBuilder- oder StringBuffer -Klassen, die eine variable Abfolge von Zeichen liefern.
Eine intuitive Implementierung besteht darin, zuerst eine Zeichenfolge zu generieren, die alle Punkte enthält, sie dann in einen StringBuilder umgewandelt und dann mit der Methode setCharat () die Zeichen im angegebenen Index ersetzen.
Betrachten Sie den Code für den ersten Versuch:
öffentliche Klasse StringReplacementDemo { /** * Generieren Sie gepunktete Linien der angegebenen Länge und ersetzen Sie sie an einem bestimmten Ort durch '#'. * * @Param Länge Die Gesamtlänge der gepunkteten Linie. * @Param Position 0 basierte Indexposition, um das Zeichen zu ersetzen. * @return ersetzt String. */ public statische String PrintSingledotinitial (int Länge, int Position) { if (Länge = Länge) { // Die Position geht über die Grenzen hinaus, eine Ausnahme kann geworfen werden oder die ursprüngliche Zeichenfolge kann zurückgegeben werden. Hier wählen Sie die Rückgabe ".". Wiederholen (Länge); } String lineofdots = ".". Wiederholung (Länge); // Dotted -Linien der angegebenen Länge stringBuilder erzeugen sb = new StringBuilder (lineofdots); sb.setcharat (Position, '#'); // Ersetzen Sie das Zeichen an der angegebenen Position return sb.toString (); // Die modifizierte Zeichenfolge} zurückgibt} public static void main (String [] args) { System.out.println (printSingledotinitial (10, 3)); // Ausgabe: ...#... System.out.println (printSingledotinitial (5, 0)); // Ausgabe: #.... System.out.println (printSingledotinitial (7, 6)); // Ausgabe: ......# System.out.println (printSingledotinitial (5, 5)); // Ausgabe: ..... (Position geht über die Grenzen hinaus, kehren Sie zur ursprünglichen Zeichenfolge zurück) } }
Analyse:
- ".". Wiederholen (Länge): Dies ist eine bequeme Methode, die von Java 11 eingeführt wird, mit der die Längenzeiten der Saitenlänge und schnell Punkte und Linien der erforderlichen Länge erzeugt werden.
- Neue StringBuilder (LineofDots): Umwandelt die generierte Dotted- und Zeilenzeichenfolge in ein StringBuilder -Objekt, um sie veränderlich zu machen.
- sb.setcharat (Position, '#'): Dies ist eine der Kernmethoden von StringBuilder, sodass Zeichen an der angegebenen Position (0 basierter Index) ersetzt werden können.
- Return sb.toString (): Konvertiert den modifizierten StringBuilder zurück in String und kehrt zurück.
Anmerkungen:
- Der Positionsparameter wird normalerweise als 0-basierter Index angesehen, dh der Index des ersten Zeichens 0. Wenn die Position in der Anforderung 1 basiert (z. B. die 1. Position), muss er vor der Verwendung an Position-1 angepasst werden.
- Eine gültige Eingabevalidierung von Länge und Position ist erforderlich, um IndexoutOfBoundSexception zu vermeiden oder unerwartete Ergebnisse zu erzielen.
Optimierungslösung: Effiziente Konstruktion basierend auf String.repeat ()
Obwohl die Methode StringBuilder.setcharat () funktioniert, können wir die Zielzeichenfolge auch über eine direktere Nähte erstellen, insbesondere wenn die Ersatzposition bekannt ist. Diese Methode kann den Schritt zur Änderung der vollständigen Punkte und Linien vermeiden, aber drei Teile direkt spleißen: den Punkt vor dem Zeichen, das Zeichen selbst und den Punkt nach dem Zeichen.
Das Folgende ist die optimierte Implementierungslösung:
öffentliche Klasse StringReplacementoptimized { /** * Generieren Sie gepunktete Linien der angegebenen Länge und ersetzen Sie sie an einem bestimmten Ort durch '#'. * Verwenden Sie direktes Spleißen, um zu vermeiden, dass die vollständige Zeichenfolge geändert wird. * * @Param Länge Die Gesamtlänge der gepunkteten Linie. * @Param Position 0 basierte Indexposition, um das Zeichen zu ersetzen. * @return ersetzt String. */ public statische String PrintSingledotoptimized (int Länge, int Position) { // 1. Grundüberprüfung der Eingabeparameter if (Länge = Länge nur ein '#' zurückgegeben wird. // Dieser Ansatz ist spezifisch für das ursprüngliche Problem, und ein allgemeinerer Ansatz kann darin bestehen, eine Ausnahme oder die ursprüngliche Zeichenfolge zurückzugeben. if (Position = Länge) { // Beispiel: Wenn die Position den gültigen Bereich überschreitet, können Sie die ursprüngliche gepunktete Linie zurückgeben oder eine Ausnahme auswerfen // Hier folgen wir der Logik der ursprünglichen Antwort, wenn Position> = Länge "#" zurückgeben. // Wenn Position = Länge zurückkehren "#"; // Folgen Sie der spezifischen Handhabung der ursprünglichen Antwort} } // 3.. Verwenden Sie StringBuilder, um drei Teile effizient zu spleißen, die neue StringBuilder () zurückgeben. .Append (".". Wiederholen (Position)) // Ersetzen Sie den Punkt vor dem Zeichen. Append ("#") // Ersetzen Sie das Zeichen selbst. } public static void main (String [] args) { System.out.println (printSingledotoptimized (10, 3)); // Ausgabe: ...#... System.out.println (printSingledotoptimized (5, 0)); // Ausgabe: #.... System.out.println (printSingledotoptimized (7, 6)); // Ausgabe: ......# System.out.println (printSingledotoptimized (5, 5)); // Ausgabe: # (Befolgen Sie die spezifische Verarbeitung der ursprünglichen Antwort) System.out.println (printSingledotoptimized (5, -1)); // Ausgabe: ..... (Position ist negativ, kehren Sie zur ursprünglichen gepunkteten Linie zurück) } }
Code Beispielanalyse:
- Parameterüberprüfung: Führen Sie zunächst eine grundlegende Überprüfung der Länge durch, um sicherzustellen, dass es sich um eine positive Zahl handelt.
- Verarbeitung von Grenzbedingungen:
- Wenn (Position
- if (Position> = Länge): Wenn die Position größer oder gleich der Länge ist, bedeutet dies außerhalb des gültigen Indexbereichs (0 bis Länge 1). Die ursprüngliche Antwort gibt hier eine einzige "#" zurück. Dies ist eine sehr spezifische Geschäftslogik, und in praktischen Anwendungen können Sie eher geneigt sein, indexoutofBoundSexception zu werfen oder die ursprüngliche gepunktete Zeichenfolge zurückzugeben, um eine explizitere Fehleranzeige oder ein Standardverhalten zu liefern. Dieses Tutorial behält diese besondere Behandlung der ursprünglichen Antwort bei, wird jedoch empfohlen, dass sich die Leser entsprechend den tatsächlichen Bedürfnissen anpassen.
- StringBuilder -Spleißen:
- ".". Wiederholen (Position): Erzeugt den Punkt vor dem Ersatzcharakter. Wenn die Position beispielsweise 3 ist, wird ein ... generiert.
- append ("#"): Fügen Sie ein Ersatzcharakter hinzu.
- ".". Wiederholen (Länge - Position - 1): Erzeugt den Punkt nach dem Ersatzzeichen. Länge - Position - 1 berechnet, wie viele Punkte benötigt werden, nachdem die Zeichen ersetzt werden. Beispielsweise beträgt die Gesamtlänge 10 und die Position 3, dann werden nach dem Ersetzen der Zeichen 10 - 3 - 1 = 6 Punkte benötigt.
- toString (): Konvertieren Sie den endgültigen erstellten StringBuilder -Inhalt in die String -Rückgabe.
Dinge zu beachten
- Indexierungskonvention: In Java sind sowohl Zeichenfolgen als auch Array-Indizes 0 basiert. Stellen Sie beim Entwerfen der Methode sicher, ob der Positionsparameter 0 basiert oder 1 basiert ist. Wenn der externe Anrufer auf 1 basiert verwendet wird, können Sie die Position-1-Konvertierung innerhalb der Methode durchführen.
- Eingabeüberprüfung: Es ist entscheidend, die Eingabeparameter wie Länge und Position strikt zu überprüfen. Beispielsweise sollte die Länge keine negative Anzahl sein, und die Position sollte sich innerhalb des gültigen Bereichs von [0, Länge-1] befinden. Unsachgemäße Eingaben können indexoutOfBoundSexception oder andere logische Fehler verursachen.
- Leistungsüberlegungen: Für eine geringe Anzahl von String -Operationen gibt es möglicherweise keine offensichtlichen Leistungsprobleme, wenn Operatoren zum direkten Spleißen verwendet werden. Aber wenn es um viel Nähte oder Herren in einer Schleife geht, sind StringBuilder (nicht-thread-safe, etwas bessere Leistung) oder StringBuffer (Thread-Safe) bessere Auswahlmöglichkeiten, da sie vermeiden, eine große Anzahl von Zwischensting-Objekten zu erstellen.
- Lesbarkeit und Wartung: Ein klares und leicht verständliches Code zu schreiben ist eine gute Praxis. Wenn Sie aussagekräftige Variablennamen, das Hinzufügen der erforderlichen Kommentare und die Einhaltung der Verantwortlichkeiten der Methoden einzelne, können Sie die Lesbarkeit und Wartung Ihres Codes verbessern.
- Fehlerbehandlung: Für die ungültige Position, ob der Standardwert zurückgibt, eine Ausnahme ausgelöst oder eine andere Logik ausführen sollte, sollte anhand spezifischer Geschäftsanforderungen und API -Designprinzipien ermittelt werden.
Zusammenfassen
In diesem Artikel werden zwei Hauptmethoden eingeführt, um Zeichenlinien der angegebenen Länge in Java zu generieren und Zeichen an bestimmten Stellen zu ersetzen. Die anfängliche Methode verwendet StringBuilder.setcharat (), um die vorgenerierte Zeichenfolge, die einfach und intuitiv ist, direkt zu ändern. Die Optimierungslösung baut direkt dreiteilige Zeichenfolgen durch die Kombination von String.Repeat () und StringBuilder auf, wodurch die Erstellung von Zwischenzeichenfolgen vermieden wird und in bestimmten Szenarien möglicherweise effizienter ist. Welche Methode auch immer ausgewählt wird, das Verständnis von 0 basierten Indizes, die Durchführung einer strengen Eingabevalidierung und die ordnungsgemäße Handhabung von Randbedingungen sind der Schlüssel zum Schreiben robuster Code.
Das obige ist der detaillierte Inhalt vonErsetzen Sie Zeichen in Zeichenfolgen an bestimmten Positionen in Java: Von gepunkteten Linien bis zu bestimmten Markern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Stock Market GPT
KI-gestützte Anlageforschung für intelligentere Entscheidungen

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Verwenden Sie den Parameter -cp, um das JAR zum Klassenpfad hinzuzufügen, damit das JVM seine internen Klassen und Ressourcen laden kann, wie z.

Javaspi ist ein integrierter Service-Erkennungsmechanismus in JDK und implementiert die dynamische Ausdehnung der interface-orientierten Dynamik durch Serviceloader. 1. Definieren Sie die Serviceschnittstelle und erstellen Sie eine Datei mit dem vollständigen Namen der Schnittstelle unter meta-inf/diensten/und schreiben Sie den vollständig qualifizierten Namen der Implementierungsklasse. 2. Verwenden Sie Serviceloader.load (), um die Implementierungsklasse zu laden, und das JVM wird die Konfiguration automatisch lesen und sie instanziieren. 3. Der Schnittstellenvertrag sollte während des Entwurfs, der Unterstützung von Priorität und bedingten Belastung geklärt und die Standardimplementierung bereitstellen. 4. Die Anwendungsszenarien umfassen Mehrzahler-Kanalzugriff und Plug-in-Überprüfung. 5. Achten Sie auf Leistung, Klassenpfad, Ausnahme -Isolation, Thread -Sicherheit und Versionskompatibilität; 6. In Java9 kann die Bereitstellung in Kombination mit Modulsystemen verwendet werden.

Verwenden Sie das Keyword implementiert die Benutzeroberfläche. Die Klasse muss spezifische Implementierungen aller Methoden in der Schnittstelle bereitstellen. Es unterstützt mehrere Schnittstellen und wird von Commas getrennt, um sicherzustellen, dass die Methoden öffentlich sind. Die Standard- und statischen Methoden nach Java 8 müssen nicht umschreiben.

Javagenericsprovidecompile-timetypesafetyandeliminatecastingbyallowingtypeparametersonclasses,interfaces,andmethods;wildcards(?,?extendsType,?superType)handleunknowntypeswithflexibility.1.UseunboundedwildcardwhentypeisirrelevantandonlyreadingasObject

In diesem Artikel wird der Mechanismus des Sendens mehrerer HTTP-Anfragen auf demselben TCP-Socket, nämlich die persistierende HTTP-Verbindung (Keep-Alive), eingehend untersucht. Der Artikel verdeutlicht den Unterschied zwischen HTTP/1.x- und HTTP/2-Protokollen, unterstreicht die Bedeutung der serverseitigen Unterstützung für anhaltende Verbindungen und wie die Verbindung korrekt behandelt wird: die Header der Antwort schließen. Durch die Analyse gemeinsamer Fehler und Bereitstellung von Best Practices möchten wir Entwicklern helfen, effiziente und robuste HTTP -Kunden aufzubauen.

In diesem Tutorial wird beschrieben, wie verschachtelte Arraylisten effizient verarbeitet werden können, die andere Arraylisten in Java enthalten und alle seine internen Elemente in ein einzelnes Array verschmelzen. Der Artikel bietet zwei Kernlösungen durch den Flatmap -Betrieb der Java 8 -Stream -API: Zuerst in eine Liste und dann das Ausfüllen des Arrays und das direkte Erstellen eines neuen Arrays, um die Anforderungen verschiedener Szenarien zu erfüllen.

Verwenden Sie die Eigenschaftenklasse, um Java -Konfigurationsdateien einfach zu lesen. 1. Konfiguration. Properties in das Ressourcenverzeichnis, laden Sie es über getClassLoader (). GetResourceAsStream () und rufen Sie die Methode load () auf, um die Datenbankkonfiguration zu lesen. 2. Wenn sich die Datei in einem externen Pfad befindet, verwenden Sie sie mit FileInputStream, um sie zu laden. 3. Verwenden Sie GetProperty (Schlüssel, StandardValue), um fehlende Tasten zu verarbeiten und Standardwerte bereitzustellen, um die Ausnahmeregelung und Eingabeüberprüfung sicherzustellen.
