Vložte reťazec nulami alebo medzerami v Jave

1. Prehľad

V tomto krátkom návode uvidíme, ako vyplniť a String v Jave. Zameriame sa hlavne na ľavú podložku, čo znamená, že k nej pridáme úvodné medzery alebo nuly, kým nedosiahne požadovanú dĺžku.

Prístup pre pravé polstrované String je veľmi podobný, takže len upozorníme na rozdiely.

2. Pad a String Používanie vlastných metód

The String trieda v jazyku Java neposkytuje pohodlnú metódu výplne, vytvorme si preto niekoľko metód samostatne. Najprv si však stanovme niekoľko očakávaní:

assertEquals ("123456", padLeftZeros ("123456", 10)); assertEquals ("0000123456", padLeftZeros ("123456", 10));

2.1. Použitím StringBuilder

To môžeme dosiahnuť pomocou StringBuilder a nejaká procedurálna logika:

public String padLeftZeros (String inputString, int length) {if (inputString.length ()> = length) {return inputString; } StringBuilder sb = nový StringBuilder (); while (sb.length () <length - inputString.length ()) {sb.append ('0'); } sb.append (inputString); vrátiť sb.toString (); }

Vidíme tu, že ak je dĺžka pôvodného textu rovnaká alebo väčšia ako požadovaná dĺžka, vrátime jej nezmenenú verziu. V opačnom prípade vytvoríme nový Reťazec, počnúc medzerami a pridaním pôvodnej.

Samozrejme, keby sme chceli podložku s iným znakom, by sme ju mohli použiť namiesto a 0.

Rovnako, ak chceme zarovnať pravú podložku, musíme to urobiť NovýStringBuilder (inputString) a potom na konci pridajte medzery.

2.2. Použitím podreťazec

Ďalším spôsobom, ako urobiť polstrovanie vľavo, je Vytvor String s požadovanou dĺžkou, ktorá obsahuje iba znaky pad, a potom použite znak podreťazec () metóda:

StringBuilder sb = nový StringBuilder (); pre (int i = 0; i <dĺžka; i ++) {sb.append (''); } návrat sb.substring (inputString.length ()) + inputString;

2.3. Použitím Reťazec.formát

A konečne, od Java 5, môžeme používať String.formát ():

return String.format ("% 1 $" + length + "s", inputString) .replace ('', '0');

Mali by sme poznamenať, že v predvolenom nastavení sa operácia výplne bude vykonávať pomocou medzier. To je dôvod, prečo musíme použiť nahradiť () metóda, ak chceme podložiť nulami alebo iným znakom.

Pre pravú podložku musíme použiť iný príznak: %1$-

3. Pad a String Používanie knižníc

Existujú aj externé knižnice, ktoré už ponúkajú funkcie polstrovania.

3.1. Apache Commons Lang

Apache Commons Lang poskytuje balík tried nástrojov Java. Jedným z najobľúbenejších je StringUtils.

Aby sme ho mohli použiť, budeme ho musieť zahrnúť do nášho projektu pridaním jeho závislosti do nášho pom.xml spis:

 org.apache.commons commons-lang3 3.8.1 

A potom minieme inputString a dĺžka, rovnako ako metódy, ktoré sme vytvorili. Môžeme tiež odovzdať znak výplne:

assertEquals ("123456", StringUtils.leftPad ("123456", 10)); assertEquals ("0000123456", StringUtils.leftPad ("123456", 10, "0"));

Opäť platí, že String budú štandardne vyplnené medzerami alebo musíme explicitne nastaviť ďalší znak pad.

Existujú aj zodpovedajúce rightPad () metódy.

Ak chcete preskúmať viac funkcií Apache Commons Lang 3, môžete si pozrieť náš úvodný návod. Ak by ste chceli vidieť inými spôsobmi String manipulácia pomocou StringUtils triedy, pozrite si tento článok.

3.2. Google Guava

Ďalšou knižnicou, ktorú môžeme použiť, je Guava spoločnosti Google. Najprv ho samozrejme musíme pridať do projektu pridaním jeho závislosti:

 com.google.guava guava 27.0-jre 

A potom použite Struny trieda:

assertEquals ("123456", Strings.padStart ("123456", 10, '')); assertEquals ("0000123456", Strings.padStart ("123456", 10, '0'));

V tejto metóde nie je žiadny predvolený znak podložky, takže ho musíme zadávať zakaždým.

Na pravú podložku môžeme použiť padEnd () metóda.

Knižnica Guava ponúka oveľa viac funkcií a pokryli sme ich veľa. Môžete sa pozrieť na články týkajúce sa Guavy.

4. Záver

V tomto rýchlom článku sme si ukázali, ako môžeme podložiť a String v Jave. Uviedli sme príklady pomocou vlastných implementácií alebo existujúcich knižníc.

Kompletný zdrojový kód nájdete ako obvykle na serveri GitHub.


$config[zx-auto] not found$config[zx-overlay] not found