Språkkonventioner och redigering av tal. • Konventioner för olika

Kap J3-1
Språkkonventioner och redigering av tal.
• Konventioner för olika språk hanteras med hjälp av klassen
java.util.Locale
– Ett objekt i denna klass beskriver en lokal konvention.
• Lokala konventioner bestämmer
– format för datum, tider, numeriska tal, tecken etc
– Ett ex:
Locale.setDefault(Locale (”sv”,”SE”));
NumberFormat swe= NumberFormat .getInstance();
NumberFormat us= NumberFormat. getInstance (Locale.US);
System.out.println( swe.format(x));
System.out.println( us.format(x));
– Utskrift
9 313 544,321
9,313,544.321
9/21/00
Kap J3-2
Redigering av tal, forts.
• Standardklassen NumberFormat innehåller hjälpmedel för
redigering av tal.
– Den finns i paketet java.text.
• Gången är följande:
– Instansiera en ”redigerare”.
NumberFormat nf= NumberFormat. getInstance ();//lokala konv
– Sätt redigeringsegenskaper med därför avsedd metod.T ex
nf.setMaximumFractionDigits(2);
nf.setMinimumIntegerDigits(8);
nf.setGroupingUsed( false );
– Anropa format() för att omvandla talet till text.
System.out.println( nf.format(x));
– Utskrift
09313544.32
9/21/00
Kap J3-3
Redigeringsmetoder
• Redigeringsmetoder i java.text.NumberFormat
setMaximumFractionDigits (n);//högst n decimaler, def =3
setMaximumIntegerDigits(n);//högst n heltalssiffror
setMinimumFractionDigits (n);//minst n decimaler
setMinimumIntegerDigits(n);//minst n heltalssiffror
setGroupingUsed(true);// skall grupperas
setGroupingUsed(false);// skall ej grupperas
9/21/00
1
Kap J3-4
Exempel
• Ändring av metoden toString() i klassen Date.
– Nedanstående metod returnerar t ex strängen
19990101
• Redigerare används främst när numeriska resultat skall
visas i program med grafiska användargränssnitt.
// ”Swedish” conversion to String
public String toString( )
{
NumberFormat nf= NumberFormat.getInstance();
nf.setMinimumIntegerDigits(2);
nf.setGroupingUsed(false);
return nf.format( year ) + nf .format( month)
+ nf .format( day);
}
9/21/00
Kap J3-5
Inläsning och utskrift.
• Läsning och skrivning är en smula komplicerat i Java.
– Anledningar:
• Java i första hand avsett för GUI.
• Java använder strömmar (streams ) och skall vara så generellt som
möjligt.
• ”höjer” ambitionsnivån jämfört med vad som var fallet med tidigare
språk.
• En ström (stream) är ett flöde av data som strömmar in i
eller ut från ett program.
• I/O hanteras med hjälp av paketet java.io.
– sofistikerat bibliotek innehållande mängder av möjligheter.
9/21/00
Kap J3-6
Grundläggande strömoperationer.
• Tre strömmar är fördefinierade för terminal-I/O
– System.in
– System.out
standard input
standard output
klass InputStream
klass PrintStream
• använder buffert. Töms med System.out.flush().
– System.err
standard ”error”
• Metoderna print () och println() används för formaterad
utskrift.
– Varje typ kan konverteras till en sträng genom anrop av dess
toString()-metod.
• readLine() (och read()) används för formaterad inläsning.
– readLine() läser till dess den stöter på ett radslutstecken eller EOF.
• returnerar bara själva textsträngen.
• returnerar null om EOF.
• ett läsfel genererar någon IOException.
– måste fångas förr eller senare.
9/21/00
2
Kap J3-7
StringTokenizer
• StringTokenizer-objekt är bra att använda för att läsa flera
värden från en rad. Se exempel nedan.
– Separerar strängen m h a tokens.
– import java. util.*
import java.i o.*;
import java.util.*;
public class MinTest
{
public static void main (String args[ ] ) {
BufferedReader in =
new BufferedReader(new InputStreamReader( System.in));
String oneLine;
StringTokenizer str;
int x; double y;
9/21/00
Kap J3-8
StringTokenizer , forts.
System. out.println ("Enter one int and one double on one line:");
try {
oneLine = in.readLine( );
str = new StringTokenizer( oneLine );
if( str.countTokens( ) != 2 )
throw new NumberFormatException( );
x = Integer.parseInt ( str. nextToken( ) );
y = Double.valueOf( str.nextToken( ) ).doubleValue();
System.out.println( "Min: " + Math.min( x, y ) );
}
catch ( Exception e )
{ System.err.println( "Error: need two correct numbers" ); }
}
}
9/21/00
Kap J3-9
Inläsning
System.in
(InputStream)
InputStreamReader
in
(Bufferedreader)
• Läsning från System.in måste göras via andra strömmar. Se ovan.
• I BufferedReader finns metoden readLine().
– Genererar felsignaler (exceptionella händelser) av klassen IOException.
• Metoderna parseInt() och valueOf() finns i omslagsklasserna
(wrapper classes) Integer och Double.
– Genererar felsignaler av klassen NumberFormatException.
• Felsignaler måste antingen tas om hand eller skickas vidare.
– Se alternativ main-metod nedan.
..
public class MinTest
{
public static void main (String args[ ] )
throws IOException, NumberFormatException {
…..
9/21/00
3
Kap J3-10
Textfiler.
• En fil är en godtyckligt lång följd av bytes.
• Två typer
– textfiler
• tecken kodade enligt LATIN_1, ASCII eller annan kod.
– binärfiler
• t ex data på binär form, exekverbara program etc.
• Om standardklasser används är det enklast med
– FileReader och FileWriter.
• m h a dessa kan koppling ske till önskad fil.
• En grundregel i Java är att vad som fungerar för terminalI/O också fungerar för filer. Se följande program!
9/21/00
Kap J3-11
Klassen ListaFiler
import java.i o.*;
public class ListaFiler
{ public static void main( String [ ] args ) {
try {
if(args.length==0) System.out. println("No files specified");
for( int i = 0; i < args.length ; i++ )
listFile( args[ i ] );
} catch( Exception e ) { System. out.println( e ); }
}
public static void listFile( String fileName )
throws IOException {
FileReader theFile; BufferedReader fileIn = null;
String oneLine;
System.out.println( "FILE: " + fileName );
theFile = new FileReader( fileName );
fileIn = new BufferedReader( theFile );
while( ( oneLine = fileIn. readLine( ) ) != null )
System. out.println (oneLine);
if(fileIn != null ) fileIn .close( );
}
9/21/00
}
Kap J3-12
Några körningar
D: \minaprog\java\ohtester>java ListaFiler a.txt b.txt
FILE: a.txt
Peter
Hellstr ÷m
FILE: b.txt
Hans Filips v 12
D: \minaprog\java\ohtester>java ListaFiler
No files specified
D: \minaprog\java\ohtester>java ListaFiler a.txt d.txt
FILE: a.txt
Peter
Hellstr ÷m
FILE: d.txt
java.io.FileNotFoundException: d.txt (Det g_r inte att hitta filen)
D: \minaprog\java\ohtester>
9/21/00
4
Kap J3-13
Utskrift
• Vid utskrift (till fil) är det lämpligt att använda sig av
Klassen PrintWriter.
– innehåller metoderna
• println()
• print()
• En PrintWriter-ström kopplas till en fil med hjälp av en
FileWriter-ström, via en mellanliggande BufferedWriterström.
– FileNotFoundException genereras om inte filen finns!
• Se följande program
9/21/00
Kap J3-14
Klass FilKopiering
import java.i o.*;
class FilKopiering {
public static void main(String[] arg)
throws IOException, FileNotFoundException {
//skapa ström från infil
BufferedReader inFil = new BufferedReader(
new FileReader("indata.txt") );
//skapa ström till utfil
PrintWriter utFil= new PrintWriter( new BufferedWriter (
new FileWriter("utdata.txt") ) );
//kopiera
int antalRad=0; int antalTeck=0;
while (true) {
String rad= inFil. readLine();
if (rad==null ) break;
utFil.print(rad+" ");
antalRad++; antalTeck += rad. length ();
}
utFil.close();
System.out.println("Antal kopierade rader= " + antalRad);
System.out.println("Antal kopierade tecken= " + antalTeck);
9/21/00
}
}
Kap J3-15
Utskrift och filinnehåll
• DOS-fönster
D:\minaprog\java\ohtester>java FilKopiering
Antal kopierade rader= 4
Antal kopierade tecken= 10
D:\minaprog\java\ohtester>
•
indata. txt
a
bb
ccc
dddd
• utdata. txt
a bb ccc dddd
9/21/00
5
Kap J3-16
Spionklassen
import java.io.*;
class Spy {
public static PrintWriter spyFil;
public static void spyprt(String mess) throws IOException, FileNotFoundException
{
//Skriv ut meddelandet
spyFil.println(mess);
}
}
import java.io.*;
class SpyUser {
private boolean b=true; private int i=1; private double d=1.1;
public void doSome() throws IOException, FileNotFoundException {
Spy.spyprt("Min första instansvariabel är= " + b);
Spy.spyprt("Min ANDRA instansvariabel är= " + i);
Spy.spyprt("Min tredje instansvariabel är= " + d);
}
}
9/21/00
Kap J3-17
Test av Spionklassen
import java.io.*;
class TestSpyUser {
public static void main(String[] arg) throws IOException, FileNotFoundException
{
System.out.println ("Börjar ");
//skapa ström till utfil
PrintWriter utFil=
new PrintWriter( new BufferedWriter( new FileWriter("utdata.txt") ) );
Spy.spyFil=utFil;
SpyUser su= new SpyUser();
su.doSome(); su.doSome();
utFil.close(); System.out.println("Slut " );
}
}
9/21/00
Kap J3-18
Reserverade ord i Java.
----------------------------------------------------------------abstract
double
int
super
boolean
else
interface
switch
break
extends
long
synchronized
byte
final
native
this
case
finally
new
throw
catch
float
package
throws
char
for
private
transient
class
goto
protected
try
const
if
public
void
continue
implements
return
volatile
default
import
short
while
do
instanceof
static
----------------------------------------------------------------– const och goto används inte i språket men är reserverade ändå.
9/21/00
6
Kap J3-19
Javas Urmoder - den verkligt objektifierade.
• Object fungerar som en generell basklass för samtliga klasser.
– Alla klasser ärver direkt eller indirekt av denna.
public class BuzzWord //Implicit arv av Object
{
//Medlemmar...
}
public class BuzzWord extends Object//Explicit arv
{
//Medlemmar….
}
9/21/00
Kap J3-20
Några metoder i klassen Object.
• String toString ()
– Returnerar en sträng som representerar värdet av objektet.
• boolean equals(Object obj)
– Jämför om två objekt är lika.
• Object clone()
– Skapar en kopia av nuvarande objekt.
• final Class getClass()
– Returnerar information ett objekt.
• void finalize()
– Anropas när ett objekt delokeras. Används för att ”städa upp” efter
sig.
• int hashCode()
– Returnerar en unik hashkod.
9/21/00
7