Reguljära uttryck Ett sätt att söka och manipulera text Reguljära uttryck Konstruerar mönster som försöker hitta nåt i text Viktigt, användbart, många resurser http://regex.info/ http://etext.lib.virginia.edu/services/helpsheets/unix/regex.html http://www.regular-expressions.info/ http://regexlib.com/default.aspx http://regexlib.com/cheatsheet.aspx 459 460 Boka en resa för boken som finns i bokstugan norr om bokrike bok(en stugan rike) bock\1 Boka en resa för bocken som finns i bockstugan norr om bockrike 461 462 Nu 17 kommer en siffra78 och en till 78 men utan 7kstuga 89 \b(\d+)\b import java.util.regex.*; public class Demo01 private static final String PatternToLookFor = "\\b(\\d+)\\b"; private static final String TargetString = SIFFRA(\1) Nu SIFFRA(17) kommer en siffra78 och en till SIFFRA(78) men utan 7kstuga SIFFRA(89) 463 public static void main( String args[] ) Pattern p = Pattern.compile( PatternToLookFor ); Matcher m = p.matcher( TargetString ); System.out.println( m.replaceall( "SIFFRA($1)" ) ); Nu kommer en siffra78 och en till SIFFRA(78) men utan 7kstuga SIFFRA(89) 464
import java.util.regex.*; public class Demo02 private static final String PatternToLookFor = "\\b(\\d+)\\b"; private static final String TargetString = public static void main( String args[] ) Pattern p = Pattern.compile( PatternToLookFor ); Matcher m = p.matcher( TargetString ); while( m.find() ) System.out.println( m.group( ) + " start " + m.start( ) + " end " + m.end( ) ); that can be used by those to play can you say:, perhaps or between > java Demo02 78 start 34 end 36 89 start 54 end 56 465 466 import java.io.*; import java.util.regex.*; public class Demo03 private final static String EXAMPLE = "example.txt"; private final static String PATTERN = "reguljära uttrycket här"; private static String gettext( ) char inp[] = new char[1000]; try Reader input = new BufferedReader( new FileReader( EXAMPLE ) ); input.read( inp ); catch ( java.io.filenotfoundexception fnf ) fnf.printstacktrace(); catch ( java.io.ioexception io ) io.printstacktrace(); return new String(inp); public static void main( String[] argv ) Pattern p = Pattern.compile( PATTERN ); while( m.find() ) System.out.println( m.group( ) ); "w.*" to play, perhaps or between 467 468 "w[^ ]*" " w[^ ]*", ween 469, 470
" w\\w*" "\\bw\\w*\\b" 471 472 \A Början av en sträng \b Ordgräns \B Inte en ordgräns \d Siffra \D Inte en siffra \s whitespace \S Inte whitespace \t Tab \w ordtecken \W Inte ordtecken \z Slut på sträng \Z Slut på sträng eller före nyrad 473 * 0 eller flera gånger + 1 eller flera gånger? 0 eller 1 count Exact count gånger min, Minst min gånger min,max min x max *? 0 eller fler (minimalt) +? 1 eller fler (minimalt)?? 0 eller 1 (minimalt) min,? Minst min gånger (minimalt) min,max? min x max (minimalt) 474 Ta bort mellanslag i början på raden Ta bort mellanslag i början på raden public static void main( String[] argv ) Pattern p = Pattern.compile( PATTERN ); System.out.println( m.replaceall( "" ) ); "^\\s*" > java Demo04 that can be used by those to play can you say:, perhaps or between 475 public static void main( String[] argv ) Pattern p = Pattern.compile( PATTERN, Pattern.MULTILINE ); System.out.println( m.replaceall( "" ) ); "^\\s*" > java Demo05 that can be used by those to play can you say:, perhaps or between 476
Ta bort ny rad och bara ett mellanslag "\\n \\s+" Ta bort ny rad och bara ett mellanslag "\\n\\s* \\s+" > java Demo06 that can be used by those to play some regular expressions. Regular expressions, or as they sometimes are called, "regexps" are useful. What can you say:, perhaps or between 477 > java Demo06 that can be used by those to play some regular expressions. Regular expressions, or as they sometimes are called, "regexps" are useful. What can you say:, perhaps or between 478 Enklare variant... Stringklassen har en metod replaceall som också använder regexp public class Demo07 private static final String patterntolookfor = "\\b(\\d+)\\b"; private static final String targetstring = Div public static void main(string[] argv) System.out.println(targetString.replaceAll(patternToLookFor, "SIFFRA($1)")); > java Demo07 Nu kommer en siffra78 och en till SIFFRA(78) men utan 7kstuga SIFFRA(89) 479 480 Ant Program för att hantera kompilering och paketering av avancerade javaprogram. make för java Beskriver beroenden/vad som ska göras osv. i form av ett XML dokument informationen om vad som ska göras skrivs i normalfallet i en fil som heter build.xml körs genom kommandot: ant target där target är en av de targets som definierats i build.xml i den katalog där man körde kommandot Ant: Exempel <?xml version="1.0"?> <project name="hello" default="compile"> <target name="clean" description="remove intermediate files"> <delete dir="classes"/> <target name="clobber" depends="clean" description="remove all artifact files"> <delete file="hello.jar"/> <target name="compile" description="compile the Java source code to class files"> <mkdir dir="classes"/> <javac srcdir="." destdir="classes"/> <target name="jar" depends="compile" description="create a Jar file for the application"> <jar destfile="hello.jar"> <fileset dir="classes" includes="**/*.class"/> <manifest> <attribute name="main-class" value="helloprogram"/> </manifest> </jar> </project> 481 482
Properties System properties kan kommas åt via klassen System: public static String getproperty(string key) public static Properties getproperties() Nyckel-värde par med info Ytterligare nyckel-värdepar kan ställas in på kommandoraden då programmet startas -D flaggan används ex: java -Ddebug.messages=true Kan ersätta direkt användning av kommandoradsargumenten och ge ett smidigare sätt att specificera värden vid programstart Ett program kan även använda Properties-klassen för egna inställningar 483 Göra ett program tillgängligt på flera språk Localization Blir svårt om vi har konstanta strängar i vårat program Om vi lagrar våra strängar i en properties fil så kan vi sedan ha olika sådana för olika språk och länder Eclipse har stöd för att göra detta Klassen ResourceBundle hanterar att man får rätt version beroende på vilket språk och land man har ställt in som standard för sin jvm (går också att specificera då man hämtar den) Jobbar med nyckel/värde par 484