Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3
Excerpt

Strenganalyse gir deg muligheten til å ta inn en streng, analysere den og hente ut de delene/informasjonen du trenger.

Her finner du enkle teknikker for å analysere en streng og manipulere den til å hente ut informasjonen du ønsker.

 

Det finnes mange teknikker for å hente ut informasjon som du trenger fra en streng. På denne siden vil vi gå igjennom mange slike teknikker for å hente ønskelig informasjon fra en satt streng. Vi vil hovedsakelig bruke ferdiglagde metoder for en streng. En full oversikt over metoder som klassen String benytter seg av finner du her. Sjekk ut siden Datatyper for en oversikt og eksempler over metoder som er mye brukt. 

 

indexOf(char c) - Finne indeksen til en char

Dette er en god metode for å finne en spesiell bokstav i en string og få indeksen som den innehar. Dette kan gjøre oppdeling av navn enkelt, hvis det kombineres med substring(). indexOf(char c) finner indexen til første forekomst av c, vi vil se på litt flere versjoner av denne metoden.

Code Block
languagejava
titleindexOf()
String name = "Ola Nordmann";
int indexOfSurname = name.indexOf(' ')+1; //indexOfSurname inneholder nå indexen til mellomrommet, og vi kan nå skille etternavn fra hele navnet. legger til 1 for å få indexen til neste bosktav.
 
name = "Knut Ola Nordmann"
indexOfSurname = name.indexOf(' '+1); //nå har vi kun indexen til mellomnavnet. Det finnes to teknikker for å finne etternavnet
int middleName = indexOfSurname;
indexOfSurname = name.indexOf(' ', middleName)+1; //gjør indexOf() fra indexen som vi sendte inn og til slutten av strengen.
indexOfSurname = name.lastIndexOf(' ')+1; //finner siste forekomst av den gitte parameteren, i dette tilfellet whitespace, som gir oss etternavnet
 
String surName = name.substring(indexOfSurname); // strengen surName inneholder nå etternavnet.
 
 
name = "Knut Ola Hagen Nordmann"; 
//vi ønsker en ArrayList med hvert enkelt navn som et element
int beginIndex = 0;
ArrayList<String> list = new ArrayList<String>();
while(true){
	int endIndex = name.indexOf(' ', beginIndex)+1;//finner indexen til neste navn i lista
	if(endIndex == 0){ //hvis den ikke finner char'en ' ', så returnerer den -1. Sjekker for == 0 siden vi har plusset på 1 tidligere. 
		break; //Dette betyr at vi er på siste ordet og vi kan bryte ut av while-løkken
	}
	list.add(name.substring(beginIndex, endIndex-1)); //Vi har nå funnet start og slutt indexen til ordet, og vi kan legge det i lista.
	beginIndex = endIndex; //slutten på forgje ord(-1), er starten på neste
		}
	list.add(name.substring(beginIndex));//legger til det siste ordet i stringen
	System.out.println(list); // printer ut: [Knut, Ola, Hagen, Nordmann]

 

split(String regex) - Dele opp en streng rundt en annen

Selvom å bruke indexOf() er svært allsidig, kan det være noe tungvint når man kun skal dele opp en streng i flere deler. Dette gjør split() i løpet av en linje. Du definerer kun en String som den deler opp strengen din utifra. ( Du bruker egentlig et spesielt mønster, regular expression, men dette er ikke nødvending å kunne). Den har en svært komplisert struktur, her vil vi bruke noe enkle, men svært nyttige versjoner av den.

Code Block
languagejava
titlesplit()
// som sist ønsker vi en liste med hvert enkelt navn som et element
String name = "Knut Ola Hagen Nordmann";
String[] list = name.split(" ");//list inneholder nå: [Knut, Ola, Hagen, Nordmann]
 
 
//ovenfor var den enkleste utgaven, man kan også splitte på så lange strenger man ønsker
String dager = "MandagTirsdagOnsdagTorsdagFredagLordagSondag";
list = dager.split("dag"); //list inneholder nå: [Man, Tirs, Ons, Tors, Fre, Lor, Son]
 
// "."(punktum) representer alle symboler. og flere kan brukes etterhverandre og forskjellige steder i en string
list = dager.split(".dag"); //list inneholder nå: [Ma, Tir, On, Tor, Fr, Lo, So]
list = dager.split("..dag"); //list inneholder nå: [M, Ti, O, To, F, L, S]
 
//slike spesielle symboler som punktum må "escapes", dvs å sifra til regex-tolkeren at vi vil bruke dens faktiske verdi ved å bruke "\."(backslash)
String ntnu = "ntnu.no";
list = ntnu.split("\."); // Dette vil ikke java compileren godta, ettersom den også bruker backslash til å "escape", derfor må vi legge til enda en backslash
list = ntnu.split("\\."); // list inneholder nå: [ntnu, no]
 
//vi kan også dele opp en string med forskjellige bokstaver
String email = "olanordmann@ntnu.no";
list = email.split("[an]"); //her splittes det på både a og n, list inneholder nå: [ol, , ordm, , , @, t, u., o, ]
//en litt mer nyttigere versjon
list = email.split("[@\\.]"); // list inneholder nå: [olanordmann, ntnu, no]

Utforsk linken ovenfor for flere nyttige måter å skrive en regex string på. 

Behandle en e-post

Man vil ofte komme bort i e-poster som en systemutvikler. Det kan være mye forskjellig som må gjøres med den. Her er noen eksempler. Vi bruker klassen StringBuilder til å effektiv bygge opp en streng.

...

Ovenfor er det kun nevnt noen få eksempler på hva man kan gjøre med noen av metodene til String, men det viser hvor mye gratis man får. Ved å bruke et IDE som f.eks Eclipse kan du få opp mange flere forslag til metoder du kan bruke med forskjellige parametere. 

 

 

 

Ferdig
7095