In deze tutorial zul je vertrouwd raken met een van de belangrijkste programmeergegevensstructuren (typen) in Java-the String. Stringvariabelen kunnen worden gebruikt om de tekstuele (letters, cijfers, symbolen) gegevens van een programma op te slaan.
Android-applicaties zijn geschreven in de Java, een programmeertaal. Java heeft een aantal primitieve gegevenstypen voor verschillende soorten getallen (gehele getallen, drijvers, etc.), Booleaanse waarden en enkele tekens. Naast het opslaan van tekstgegevens als arrays of tekens, bevat Java ook een krachtige objectklasse, String (java.lang.String), die tekstuele gegevens netjes bevat en kan worden gebruikt om inhoud te manipuleren. In deze zelfstudie leert u hoe u strings op verschillende manieren kunt maken, gebruiken en manipuleren, inclusief hoe u ze opslaat als Android-projectresources.
Technisch gezien heb je geen tools nodig om deze tutorial te voltooien, maar je zult ze zeker nodig hebben om Android-applicaties te ontwikkelen.
Om Android-applicaties (of welke Java-applicaties dan ook) te ontwikkelen, hebt u een ontwikkelomgeving nodig om applicaties te schrijven en te bouwen. Eclipse is een zeer populaire ontwikkelomgeving (IDE) voor Java en de geprefereerde IDE voor Android-ontwikkeling. Het is gratis beschikbaar voor Windows-, Mac- en Linux-besturingssystemen.
Zie de Android-ontwikkelaarswebsite voor volledige instructies over het installeren van Eclipse (inclusief welke versies worden ondersteund) en de Android SDK.
Op het meest fundamentele niveau zijn Java-programma's onderverdeeld in functionaliteit en gegevens. Veel menselijk leesbare gegevens komen in de vorm van woorden, karakters, interpunctie, cijfers enzovoort. Kortom, alles wat de gebruiker op een toetsenbord kan typen. Programmeurs noemen deze opslag van tekstuele inhoud "stringgegevens", maar de gegevens zelf kunnen worden opgeslagen met behulp van een verscheidenheid aan verschillende datastructuren, afhankelijk van uw vereisten:
Zoals je ziet, zijn er verschillende manieren om stringgegevens op te slaan in Java. De volgende Java-variabelen vertegenwoordigen bijvoorbeeld een reeks klinkertekens op verschillende manieren (zoals bytes, tekens, Unicode-weergaven of subtekenreeksen):
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 = new String ("\ u0061 \ u0065 \ u0069 \ u006F \ u0075"); CharSequence csVowels = (CharSequence) new String ("aeiou"); StringBuffer sbVowels = nieuwe StringBuffer ("a" + "e" + "iou"); StringBuilder sVowelBuilder = new StringBuilder (); sVowelBuilder.append ( 'a'); sVowelBuilder.append ( "EOB"); sVowelBuilder.append ( '\ u0075');
De klasse String is de meest gebruikte gemaksklasse, vooral door beginners. U wilt ook een goed begrip hebben van de interface CharSequence (java.lang.CharSequence), omdat deze vaak wordt gebruikt bij het werken met Android-bronnen.
De klasse String is beschikbaar als onderdeel van het pakket java.lang, dat is opgenomen in de Android SDK die ontwikkelaars kunnen gebruiken. De volledige documentatie voor de klasse String vindt u in de Android SDK-documentatie.
De klasse String vertegenwoordigt een onveranderlijke (onveranderlijke) reeks Unicode-tekens (16-bits codering), geschikt voor het opslaan van tekens in elke taal (Engels, Duits, Japans, enzovoort).
Dus wat heeft dit met Android-ontwikkeling te maken? Welnu, strings worden gebruikt om inhoud op te slaan die wordt weergegeven op toepassingsschermen of om de invoer van een gebruiker op te slaan. Android-ontwikkelaars zijn constant bezig met het laden, maken en manipuleren van stringgegevens. Laten we eens kijken naar enkele dingen die we kunnen doen met de klasse String.
De klasse String heeft verschillende constructors voor het maken en instantiëren van tekenreeksvariabelen. Stringvariabelen kunnen worden ingesteld om te worden leeggemaakt met behulp van het nul-trefwoord. U kunt ook de inhoud van bytes, tekens of andere tekenreeksgegevens instellen. Hier zijn bijvoorbeeld enkele manieren om tekenreekvariabelen te maken voor gebruik binnen uw toepassingen (sommige worden geïnitialiseerd vanuit de variabelen, zoals uVowels en sVowelBuilder, eerder gedefinieerd in deze zelfstudie):
String strVowels1 = "aeiou"; String strVowels2 = new String ("aeiou"); String strVowels3 = new String (sVowelBuilder); String strVowels4 = new String (sbVowels); String strVowels5 = new String (uVowels); String strVowels6 = new String (abyteVowels2); String strVowels7 = new String (abyteVowelsU); String strVowels8 = new String ("a" + "e" + "iou"); String strVowels9 = new String (new char [] '\ u0061', '\ u0065', '\ u0069', '\ u006F', '\ u0075'); String strVowels10 = new String (nieuwe byte [] '\ u0061', '\ u0065', '\ u0069', '\ u006F', '\ u0075');
U kunt ook strings laden uit Android-toepassingsbronnen, op voorwaarde dat u ze correct hebt opgeslagen. U kunt de tekenreeksbron voor de toepassingsnaam bijvoorbeeld als volgt in een String-variabele laden:
String strAppName = getResources (). GetString (R.string.app_name);
Dit vereist dat de betreffende Android-applicatie ergens in de projectdirectoryhiërarchie / res / values een tekenreeksbron met de naam appnaam bevat. Bijvoorbeeld een bestand met de naam /res/values/strings.xml dat de volgende XML-reeksdefinitie bevat:
Mijn Android-appnaam!
Laten we nu eens kijken naar enkele coole dingen die je kunt doen met String-objecten. Laten we eerst eens kijken naar de functies die beschikbaar zijn in de klasse String zelf.
Het is handig om een reeks te zien als een reeks tekens. Als zodanig wil je soms de inhoud herhalen, één karakter per keer. Er zijn verschillende manieren om dit te doen, maar een eenvoudige manier is om een for () -lus te gebruiken. U kunt profiteren van de methode String () om te bepalen hoeveel tekens u hebt en de methode charAt () om een specifiek teken op te halen aan de hand van de index, net zoals u een arrayindex zou doen. Bijvoorbeeld:
String strVowels = "AEIOU"; voor (int i = 0; i < strVowels.length(); i++) char curChar = strVowels.charAt(i);
Zoals eerder vermeld, zijn stringvariabelen onveranderbaar of onveranderbaar. Dat wil niet zeggen dat je de tekstuele inhoud van een String-variabele niet kunt manipuleren, maar elke methode die dat doet, retourneert een nieuwe String-variabele. Enkele veelvoorkomende voorbeelden van String-klasse-methoden die nieuwe String-variabelen genereren, zijn onder meer:
Houd er rekening mee dat elk van deze methoden a nieuwe Object stringobject om het resultaat op te slaan. De oorspronkelijke tekenreeksvariabele blijft ongewijzigd.
Soms wil je je string naar hoofdletters of kleine letters converteren. Een reden waarom u misschien het geval van een tekenreeks wilt wijzigen, is door de tekenreeks te normaliseren zodat niet-hoofdlettergevoelig zoeken of matchen eenvoudiger te implementeren is.
String strUpperCaseVersion = strVowels.toUpperCase (); String strLowerCaseVersion = strVowels.toLowerCase ();
Merk op dat u hier twee nieuwe String-variabelen hebt gemaakt voor gebruik. De oorspronkelijke String-variabele, strVowels, blijft ongewijzigd.
Soms wil je snel een string ontleden in substrings. U kunt dit doen om de afzonderlijke woorden uit een zin te halen, of een lijst met afgebakende tags, enz. U kunt hiervoor eenvoudige reguliere expressies gebruiken met de functie split (). De volgende code extraheert bijvoorbeeld de afzonderlijke woorden (kleuren) uit een tekenreeks:
Teken enkele woorden = "Rood oranjegeel Groen Blauw Indigo"; String aColors [] = someWords.split ("");
Als u de inhoud van de reeks String, genaamd aColors, zou afdrukken, zou u zien dat:
aColors [0] = Rood aColors [1] = Oranje aColors [2] = Geel aColors [3] = Groen aColors [4] = Blauw aColors [5] = Indigo
Merk op dat u hier een nieuwe array hebt gemaakt die 6 nieuwe String-variabelen bevat voor gebruik.
U kunt controleren of twee strings overeenkomen met de methode compareTo () van de klasse String. Deze methode retourneert 0 als, en alleen als, de twee strings identiek zijn:
String strVowels = "AEIOU"; if (strVowels.compareTo ("AEIOU") == 0) // Strings match! (Deze code wordt uitgevoerd) else // Strings komen niet overeen!
Merk op dat de methode compareTo () hoofdlettergevoelig is. Overweeg om beide zijden van uw vergelijking naar één case te converteren voordat u ze vergelijkt, tenzij u specifiek op zoek bent naar één case. Als u niet om een case geeft, kunt u ook de methode compareToIgnoreCase () gebruiken in plaats van de methode compareTo ():
String strVowels = "AEIOU"; if (strVowels.compareToIgnoreCase ("aeiou") == 0) // Strings match! (Deze code wordt uitgevoerd) else // Strings komen niet overeen!
Soms wilt u een tekenreeks zoeken op een teken of subtekenreeks. Er zijn veel andere manieren om het matchen en zoeken van de tekenreeks uit te voeren, zodat u kunt bouwen welke zoekmethoden u maar wilt. U kunt ook op specifieke tekens of substrings zoeken met behulp van de methoden indexOf () en lastIndexOf (). Controleer of een reeks begint of eindigt met een subtekenreeks met de methoden startWith () en endsWith (). Ten slotte ondersteunt de methode matches () het matchen van reguliere expressies.
Hier gebruiken we de methode contains () om te bepalen of een specifieke substring bestaat:
if (strVowels.contains ("IOU") == true) // String bevat een IOU-subreeks!
Als u niet om een case geeft, gebruikt u in plaats daarvan de methode compareToIgnoreCase ():
String strVowels = "AEIOU"; if (strVowels. compareToIgnoreCase ("aeiou") == 0) // Strings match! (Deze code wordt uitgevoerd) else // Strings komen niet overeen!
TIP: bij het implementeren van matching- en zoekfunctionaliteit in uw applicaties, vergeet niet om een voorbewerkingsteeksmanipulatie uit te voeren die nodig is om hoofd- / kleine / gemengde hoofdletters uit te sluiten voordat u gaat zoeken. Gebruikersinvoernormalisatie kan worden gedaan als onderdeel van het invoervalidatieproces, waardoor uw code zo eenvoudig en onderhoudbaar mogelijk blijft.
Het String-object is zo fundamenteel voor Java dat elke klasse, omdat deze is afgeleid van de hoofdklasse Object (java.lang.Object), een toString () -methode heeft om een bruikbare tekenreeksrepresentatie van hun waarde te maken. Klassen die niet over een redelijke tekenreeksrepresentatie beschikken, geven gewoonlijk enige ID of foutopsporingsinformatie terug met betrekking tot het type klasse. Degenen die wel een redelijke tekenreeksrepresentatie hebben, zoals een getallenreeks uit een geheel getal-object, retourneren de tekstuele weergave van het ingekapselde getal. Wanneer ze zijn samengevoegd met een tekenreeks, zoals met de operator plus (+) hierboven beschreven, worden de resultaten van de toString () -methode standaard gebruikt. Bijvoorbeeld:
Geheel getal iNum = nieuw geheel getal (123); String sText = "Het getal één-twee-drie ="; String sFullText = sText + iNum; String sFullText2 = sText + iNum.toString ();
Beide tekenreeksen (sFullText en sFullText2) hebben dezelfde waarde, "Het getal één-twee-drie = 123". Veel van dergelijke objecten kunnen ook in omgekeerde volgorde werken. Dat wil zeggen dat ze een tekenreeksrepresentatie kunnen parseren en deze kunnen converteren naar het native type dat het object representeert. Voor instace, opnieuw met de Integer-klasse, kan de methode parseInt () worden gebruikt om een nieuw Integer-object te verkrijgen op basis van de tekenreeksrepresentatie.
Zoals je hebt gezien, kunnen strings met groot effect worden gebruikt. Het maken en manipuleren van snaren heeft echter een aantal nadelen. Imprudent String-manipulatie kan negatieve gevolgen hebben voor de prestaties van uw toepassing. Het is een basisprincipe van het ontwerpen van Java om geen objecten te maken die u niet nodig hebt. U kunt zien dat stringmanipulatie en -wijzigingen ertoe kunnen leiden dat veel String-variabelen rondzweven. Hier zijn enkele tips voor goed stringgebruik:
Strings zijn een belangrijk gegevenstype dat Android-ontwikkelaars gebruiken om tekstuele gegevens op te slaan. Stringgegevens, of het nu een reeks tekens, getallen, symbolen of een combinatie daarvan is, kunnen op verschillende manieren worden opgeslagen, maar de klasse String is de primaire hulpprogramma-klasse die voor dit doel wordt gebruikt. De klasse String en zijn helperklassen zoals StringBuilder bevatten een uitgebreide reeks methoden voor gebruik met tekenreeksen, zodat de inhoud kan worden doorzocht of gewijzigd.
Mobiele ontwikkelaars Lauren Darcey en Shane Conder hebben samen meerdere boeken geschreven over Android-ontwikkeling: een diepgaand programmeerboek getiteld Android Wireless Application Development en Sams TeachYourself Android Application Development binnen 24 uur. Wanneer ze niet schrijven, besteden ze hun tijd aan het ontwikkelen van mobiele software bij hun bedrijf en het leveren van consultingservices. Ze zijn te bereiken via e-mail naar [email protected], via hun blog op androidbook.blogspot.com, en op Twitter @androidwireless.