I denne opplæringen blir du kjent med en av de viktigste programmeringsdatastrukturene (typer) i Java-strengen. Stringvariabler kan brukes til å lagre tekstdata (bokstaver, tall, symboler) som er knyttet til et program.
Android-applikasjoner er skrevet i Java, et programmeringsspråk. Java har en rekke primitive datatyper for ulike typer tall (heltall, flyter, etc.), boolske verdier og enkelt tegn. I tillegg til å lagre tekstdata som arrays eller tegn, inneholder Java også en kraftig objektklasse som kalles String (java.lang.String), som inkapsler tekstdata nøyaktig og kan brukes til å manipulere innhold. I denne opplæringen lærer du hvordan du lager, bruker og manipulerer strenger på forskjellige måter, inkludert hvordan du lagrer dem som Android-prosjektressurser.
Teknisk trenger du ikke noe verktøy for å fullføre denne opplæringen, men du vil sikkert trenge dem til å utvikle Android-applikasjoner.
For å utvikle Android-applikasjoner (eller Java-programmer, for øvrig), trenger du et utviklingsmiljø for å skrive og bygge programmer. Eclipse er et svært populært utviklingsmiljø (IDE) for Java og den foretrukne IDE for Android-utvikling. Det er fritt tilgjengelig for Windows, Mac og Linux operativsystemer.
For fullstendige instruksjoner om hvordan du installerer Eclipse (inkludert hvilke versjoner som støttes) og Android SDK, se Android-utviklerens nettsted.
På det mest grunnleggende nivå er Java-programmer brutt inn i funksjonalitet og data. Mye menneskelige lesbare data kommer i form av ord, tegn, tegnsetting, tall og så videre. I utgangspunktet alt hva brukeren kan skrive på et tastatur. Programmører kaller denne lagringen av tekstlig innhold "strengdata", men dataene i seg selv kan lagres ved hjelp av en rekke forskjellige datastrukturer, avhengig av dine krav:
Som du kan se, er det mange måter å lagre strengdata på i Java. For eksempel representerer følgende Java-variabler en streng vokalkarakterer på forskjellige måter (som byte, tegn, Unicode-representasjoner eller understrenger):
String strVowels = "aeiou"; char astrVowels [] = 'a', 'e', 'i', 'o', 'u'; byte abyteVowels [] = 'a', 'e', 'i', 'o', 'u'; byte abyteVowelsU [] = '\ u0061', '\ u0065', '\ u0069', '\ u006F', '\ u0075'; String uVowels = ny String ("\ u0061 \ u0069 \ u006F \ u0075"); CharSequence csVowels = (CharSequence) ny streng ("aeiou"); StringBuffer sbVowels = ny StringBuffer ("a" + "e" + "iou"); StringBuilder sVowelBuilder = ny StringBuilder (); sVowelBuilder.append ( 'a'); sVowelBuilder.append ( "EIO"); sVowelBuilder.append ( '\ u0075');
String-klassen er brukerklassen som brukes oftest, spesielt av nybegynnere. Du vil også ha en forbigående forståelse av CharSequence (java.lang.CharSequence) grensesnittet, som det ofte brukes når du arbeider med Android ressurser.
String-klassen er tilgjengelig som en del av java.lang-pakken, som er inkludert i Android SDK for utviklere å bruke. Den komplette dokumentasjonen for String-klassen finnes i Android SDK-dokumentasjonen.
String-klassen representerer en uforanderlig (uforandelig) sekvens av Unicode-tegn (16-biters koding), egnet for lagring av tegn på hvilket som helst språk (engelsk, tysk, japansk og så videre).
Så hva har dette å gjøre med Android-utvikling? Vel, strenger brukes til å lagre innhold som vises på applikasjonsskjermbildene, eller for å lagre innspill tatt fra en bruker. Android-utviklere laster kontinuerlig, lager og manipulerer strengdata. Så la oss se på noen av de ting vi kan gjøre med String-klassen.
String-klassen har mange konstruktører, for å skape og instansere strengvariabler. Strengvariabler kan settes til å tømmes ved hjelp av null-søkeordet. Du kan også angi innholdet fra byte, tegn eller andre strengdata. For eksempel, her er noen måter å opprette strengvariabler for bruk i dine applikasjoner (noen er initialisert fra variablene, som uVowels og sVowelBuilder, definert tidligere i denne opplæringen):
String strVowels1 = "aeiou"; String strVowels2 = ny String ("aeiou"); String strVowels3 = Ny String (sVowelBuilder); String strVowels4 = Ny String (sbVowels); String strVowels5 = Ny String (uVowels); String strVowels6 = Ny String (abyteVowels2); String strVowels7 = new String (abyteVowelsU); String strVowels8 = ny String ("a" + "e" + "iou"); String strVowels9 = ny String (ny char [] '\ u0061', '\ u0065', '\ u0069', '\ u006F', '\ u0075'); String strVowels10 = ny String (ny byte [] '\ u0061', '\ u0065', '\ u0069', '\ u006F', '\ u0075');
Du kan også laste inn strenger fra Android-programressurser, forutsatt at du har lagret dem riktig. For eksempel kan du laste strenget ressurs for programnavnet til en streng variabel som følger:
String strAppName = getResources (). GetString (R.string.app_name);
Dette krever at den aktuelle Android-applikasjonen inneholder en strengressurs som heter app_name et eller annet sted i katalogen / res / verdier prosjekt katalogen hierarki. For eksempel, en fil som heter /res/values/strings.xml som inneholder følgende XML-strengdefinisjon:
Min Android App-navn!
La oss nå se på noen av de kule tingene du kan gjøre med String-objekter. Først, la oss fokusere på funksjonene som er tilgjengelige i String-klassen selv.
Det er nyttig å tenke på en streng som en sekvens av tegn. Som sådan vil du noen ganger å iterere gjennom innholdet, ett tegn om gangen. Det er mange måter å gjøre dette på, men en enkel måte er å bruke en for () sløyfe. Du kan dra nytte av metoden String lengde () for å bestemme hvor mange tegn du har, og metoden charAt () for å hente et bestemt tegn ved hjelp av indeksen, som om du ville ha en matriseindeks. For eksempel:
String strVowels = "AEIOU"; for (int i = 0; i < strVowels.length(); i++) char curChar = strVowels.charAt(i);
Som nevnt tidligere, er strengvariabler uforanderlige eller uforanderlige. Det er ikke å si at du ikke kan manipulere tekstinnholdet i en String-variabel, men hver metode som gjør det returnerer en ny String-variabel. Noen vanlige eksempler på strengklassemetoder som genererer nye strengvariabler inkluderer:
Husk at hver av disse metodene allokerer en ny Stringobjekt-forekomst for å lagre resultatet. Den opprinnelige String-variabelen forblir uendret.
Noen ganger vil du konvertere strengen til store eller små bokstaver. En grunn til at du kanskje vil endre saken med en streng, er å normalisere strengen for å gjøre det uansett å søke eller lette å søke etter søkeord.
String strUpperCaseVersion = strVowels.toUpperCase (); String strLowerCaseVersion = strVowels.toLowerCase ();
Merk at her har du opprettet to nye strengvariabler for bruk. Den opprinnelige String-variabelen, strVowels, forblir uendret.
Noen ganger vil du raskt analysere en streng i substrings. Du kan gjøre dette for å trekke ut de enkelte ordene fra en setning eller en avgrenset liste med koder, etc. Du kan bruke enkle regulære uttrykk med split () -funksjonen til dette formålet. For eksempel trekker følgende kode ut de enkelte ordene (farger) fra en streng:
String someWords = "Rød oransje gul grønn blå indigo"; String aColors [] = someWords.split ("");
Hvis du skulle skrive ut innholdet i String-arrayet kalt aColors, ville du se det:
aColors [0] = Rød aColors [1] = Orange aColors [2] = Gul aColors [3] = Grønn aColors [4] = Blå aColors [5] = Indigo
Vær oppmerksom på at her har du opprettet et nytt utvalg som inneholder 6 nye strengvariabler for bruk.
Du kan sjekke om to strenger samsvarer med String-klassens comparTo () -metode. Denne metoden vil returnere 0 hvis, og bare hvis de to strengene er identiske:
String strVowels = "AEIOU"; hvis (strVowels.compareTo ("AEIOU") == 0) // Strings match! (Denne koden kjøres) ellers // Strings samsvarer ikke!
Merk at metoden comparTo () er bokstavsfølsom. Vurder å konvertere begge sider av sammenligningen til ett tilfelle før du sammenligner dem, med mindre du er spesifikt ute etter ett tilfelle. Hvis du ikke bryr deg om saken, kan du også bruke metoden comparToIgnoreCase () i stedet for metoden comparTo ():
String strVowels = "AEIOU"; hvis (strVowels.compareToIgnoreCase ("aeiou") == 0) // Strings match! (Denne koden kjøres) ellers // Strings samsvarer ikke!
Noen ganger vil du søke etter en streng for et tegn eller substring. Det er mange andre måter å utføre strengsammenstilling og søk, slik at du kan bygge hvilke søkemetoder du ønsker. Du kan også jakte på bestemte tegn eller substrings ved hjelp av indeksene IndexOf () og lastIndexOf (), kontroller om en streng begynner eller slutter med en substring ved hjelp av methodene startWith () og endsWith (). Endelig støtter metoden () () metoden jevnlig uttrykksmatching.
Her bruker vi metoden () for å avgjøre om en bestemt substrikk eksisterer:
hvis (strVowels.contains ("IOU") == true) // String inneholder IOU understreng!
Hvis du ikke bryr deg om tilfelle, bruk metoden comparToIgnoreCase () i stedet:
String strVowels = "AEIOU"; hvis (strVowels. compareToIgnoreCase ("aeiou") == 0) // Strings match! (Denne koden kjøres) ellers // Strings samsvarer ikke!
TIP: Når du implementerer samsvarende og søkefunksjonalitet i programmene dine, må du ikke glemme å gjøre en forhåndsbehandlingsstrengmanipulering som er nødvendig for å utelukke øvre / nedre / blandede tilfelle streng problemer før du søker. Normalisering av brukerinngang kan gjøres som en del av innskrivningsvalideringsprosessen, slik at koden blir så enkel og vedlikeholdbar som mulig.
Stringsobjektet er så grunnleggende for Java at hver klasse, som følge av å være avledet fra rotklassen kalt Object (java.lang.Object), har en toString () -metode for å skape en nyttig strengrepresentasjon av verdien. Klasser som ikke har en rimelig strengrepresentasjon, returnerer vanligvis noen identifiserer eller feilsøker informasjon om typen av klasse. De som har en rimelig strengrepresentasjon, for eksempel en talestreng fra et Integer-objekt, returnerer den tekstvise representasjonen av det innkapslede nummeret. Når sammenkoblet med en streng, som med pluss (+) operatøren beskrevet ovenfor, blir toString () -metoden resultatene som standard brukt. For eksempel:
Helhet iNum = nytt heltall (123); String sText = "Tallet ett-to-tre ="; String sFullText = sText + iNum; String sFullText2 = sText + iNum.toString ();
Både strengene (sFullText og sFullText2) har samme verdi, "tallet ett-to-tre = 123". Mange slike gjenstander kan også fungere i omvendt. Det vil si, de kan analysere en String-representasjon og konvertere den til den opprinnelige typen objektet representerer. For instace, igjen med Integer-klassen, kan metoden parseInt () brukes til å få et nytt Integer-objekt basert på strengrepresentasjonen.
Som du har sett, kan strenger brukes til stor effekt. Stringopprettelse og manipulering har imidlertid noen ulemper. Uansett streng manipulasjon kan ha negative ytelsesimplikasjoner for søknaden din. Det er et grunnleggende designprinsipp for Java for ikke å lage objekter du ikke trenger. Du kan se at strengmanipulering og modifikasjoner kan resultere i mange strengvariable som flyter rundt. Her er noen tips for god strengbruk:
Strings er en viktig datatype som Android-utviklere bruker til å lagre tekstdata. Stringdata, enten det er en sekvens av tegn, tall, symboler eller noen blanding derav, kan lagres på flere måter, men strengklassen er den primære bruksklassen som brukes til dette formålet. String-klassen, og det er hjelperklasser som StringBuilder, inneholder et robust sett med metoder for bruk med strenger, slik at innholdet kan søges eller endres.
Mobilutviklere Lauren Darcey og Shane Conder har medforfatter flere bøker om Android-utvikling: en grundig programmeringsbok med tittel Android Wireless Application Development og Sams TeachYourself Android Application Development i 24 timer. Når de ikke skriver, bruker de sin tid på å utvikle mobil programvare hos deres firma og tilby konsulenttjenester. De kan nås via e-post til [email protected], via bloggen deres på androidbook.blogspot.com, og på Twitter @androidwireless.