package easyIO; import java.io.*; /** * Klasse for enkel lesing fra tastatur og fil som brukes i boken * "Rett p? Java".2.utg. 2005 og 2007. Versjon 5 med forbedret versjon * ved bruk av brukerdefinerte skilletegn. * *
Klassen tilbyr tre lesemodi: Tegn for tegn (metoden inChar),
* grupper av tegn (ord og tall) (metodene inInt, inWord, inDouble, nextChar,...)
* og linjer med tekst (metodene inLine og readLine), og tilbyr mulighet for ? spesisere
* hva som skal oppfattes som skilletegn (forh?ndsvalge er at alle
* blanke tegn er skilletegn). I tillegg tilbyr klassen metoder for ?
* sjekke input. For eksempel kan man bruke metoden
* hasNextInt()
for ? sjekke om neste gruppe av tegn kan
* tolkes som et heltall, og dermed leses med metoden inInt uten at
* det oppst?r feil.
*
*
Hvis det oppst?r feil under innlesing kastes det * enten et {@link IOException}-unntak - hvis feilen er en io-feil, * eller en {@link NumberFormatException} hvis feilen oppstod under * innlesing av et tall. * *
* // ?pner filen "test.txt" for lesing: * InExp in = new InExp("test.txt"); * * // Leser et ord fra filen * String ord = in.inWord(); * * // Leser et tall fra filen * int i = in.inInt(); * * // Leser resten av ordene i filen (blanke tegn ignoreres) * while (in.hasNext()) { * String ord = in.inWord(); * // ... * } ** *
* // ?pner en leser * InExp in = new InExp(); * * // Leser inn ett ord - venter p? input fra bruker. * String s = in.inWord(); * * // Leser og returnerer resten av linja, * // evt. neste linje hvis linja kun hadde * // linjeskifttegn igjen. * // Venter p? input fra bruker. * String linje = in.inLine(); * ** *
inWord
) leser grupper
* med tegn. En gruppe med tegn er de tegn som finnes mellom to
* skilletegn. I utganspunktet er alle blanke tegn
* (mellomrom, tabulator, ny linje, osv) satt som skilletegn, men det
* kan endres p? to m?ter. Enten kan man sette skilletegn med
* metoden {@link #setDelimiter(String) setDelimiter(String
* delimiter)}, eller man kan bruke innlesingsvarianten som tar en
* tekst med skilletegn som parameter (for eksempel {@link
* #inWord(String) inWord(String sep)}. Det f?rste alternativet
* (setDelimiter
) vil p?virke alle
* innlesingsmetodene. Det andre alternativet vil kun gjelde for den
* ene innlesingen. N?r man setter egne skilletegn vil man fjerne
* blank (mellomrom) og tab fra skilletegne og legge til de tegn man m?tte ?nske
* som f.eks ; eller ,. Man vil imidlertid alltid ha med de andre
* 'skjulte' blanke tegnene og linjeskifttegnene som varierer
* mellom operativsystemene (CRLF) DOS/Windows, (LF) Unix og (LFCR) Mac som skilletegn.
*
*
* @author Forfatterne av "Rett p? Java"
* @version 5.0. (april, 2007)
*/
public class InExp {
protected BufferedReader bf;
private int LIMIT = 1892;
private int lineNumber = 0;
private boolean newLine = false;
protected boolean FILE = false; // FLAG
protected boolean ITEM_READ = false;
private final int DECIMAL_SYSTEM = 10;
private String newLineString = System.getProperty("line.separator");
private String allwaysDelimiter = allwaysDelim();
private String delimiterString = allwaysDelimiter +" \t"; // null in ver 1-4;
private String lastDelimiterString= allwaysDelimiter; // null;in ver 1-4
private String empty ="";
// a.m. - ver 4 and 5, keeps last delimiter
static final String versjon = "ver.5.0 - 2007-04";
/**
* When setting own delimiters, this will allways be part of delimiters:
* whitespace minus blank minus TAB.
* @since ver.5
*/
private String allwaysDelim () {
String s = "";
for (int i=0; i<512; i++) {
char c = (char) i;
if( (c != ' ') &&(c!='\t') && Character.isWhitespace(c))
s=s+c;
}
return s;
}
/**
* Konstrukt?r for lesing av standard input (tastatur).
*/
public InExp() {
bf = new BufferedReader(new InputStreamReader(System.in));
}
/**
* Konstrukt?r for lesing av fil.
* @param filnavn navn p? filen
* @throws IOException hvis det oppst?r en io-feil
*/
public InExp(String filnavn) throws IOException {
FILE = true;
bf = new BufferedReader(new FileReader(filnavn));
}
/**
* Konstrukt?r for lesing av URL.
* @param url nettadressen til filen som skal leses.
* @throws IOException hvis det oppst?r en io-feil.
* @see java.net.URL
*/
public InExp(java.net.URL url) throws IOException {
bf = new BufferedReader(new InputStreamReader
(url.openStream()));
}
/**
* Hjelpemetode. Setter lesemerket
*/
private void mark() throws IOException {
bf.mark(LIMIT);
}
/**
* Hjelpemetode. tester om en String er null eller tom
*/
private boolean notEmpty(String s) {
return ! (empty.equals(s) || s == null);
}
/**
* Hjelpemetode. skipper over evt 'tidligere' delimiterstring
* @since ver.4.0
*/
private void skipLastDelimiter() throws IOException {
if (notEmpty(lastDelimiterString) ) {
skipSeparator(lastDelimiterString);
lastDelimiterString = null;
};
}
/**
* Hjelpemetode. Flytter lesehodet til sist markerte sted (mark)
*/
private void reset() throws IOException {
bf.reset();
}
/**
* Hjelpemetode. Legger til linjenummer i unntakets beskjed
* ("message") hvis det leses fra fil.
* @param nfe Unntaket hvis beskjed linjenummeret skal legges til.
* @return en tekst med den nye beskjeden.
*/
private String makeMsg(NumberFormatException nfe) {
StringBuffer sb = new StringBuffer(nfe.getMessage());
if (FILE) {
sb.append(" at input line " + getLineNumber());
}
return sb.toString();
}
/**
* Hjelpemetode. Sjekker om et tegn er linjeskifttegn, i
* hht. System.getProperty("line.separator")
* @param c tegnet som sjekkes
* @return true
hvis tegnet er et linjeskifttegn
*/
private boolean isNewLineChar(char c) {
return newLineString.indexOf(c) != -1;
}
/**
* Hjelpemetode. Returnerer f?rste uleste tegn, uten ? flytte
* lesehodet fremover.
* @return neste tegn.
*/
private char lookAtNextChar() throws IOException {
mark();
char c = read();
reset();
return c;
}
/**
* Hjelpemetode, leser et tegn uten ? ?ke linjenummer
*/
private char read() throws IOException {
return (char) bf.read();
}
/**
* Hjelpemetode. Returnerer f?rste uleste gruppe med tegn, uten ?
* flytte lesehodet fremover.
* @return neste gruppe med tegn
*/
private String lookAtNext() throws IOException {
if (endOfFile()) {
return null; // <- return
}
mark();
char c;
do {
c = read();
} while (!endOfFile() && isDelimChar(c));
if (endOfFile()) {
return null; // <- return
}
StringBuffer sb = new StringBuffer();
do {
sb.append(c);
c = read();
} while (!endOfFile() && !isDelimChar(c));
reset();
return sb.toString(); // <- return
}
/**
* Hjelpemetode. Tar hensyn til oppgitt skilletegn, og returnerer
* f?rste uleste gruppe med tegn --- uten ? flytte lesehodet
* fremover.
* @param sep teksten med skilletegn
* @return neste gruppe med tegn.
*/
private String lookAtNext(String sep) throws IOException {
String old = getDelimiter();
if (sep != null) {
setDelimiter(sep);
}
try {
return lookAtNext();
} finally {
setDelimiter(old);
}
}
/**
* Leser og returnerer f?rste gruppe med ikke-blanke tegn,
* evt. null
hvis alle ikke-blanke tegn er
* lest. Denne metoden erstatter {@link #inWord}
* @return en tekst med ikke-blanke tegn.
* @throws IOException hvis det oppst?r en io-feil.
* @since versjon 2
*/
protected String next() throws IOException {
skipSeparator();
StringBuffer sb = new StringBuffer();
char c = lookAtNextChar();
while (Character.isDefined(c) && !isDelimChar(c)) {
sb.append(getChar(false));
c = lookAtNextChar();
}
ITEM_READ = true;
return sb.length() == 0 ? null : sb.toString();
}
/**
* Hjelpemetode. Avgj?r om et tegn h?rer til blant skilletegnene.
* ver 5.0 - Alle whitespace som linjeskift etc. minus blank og tab er skilletegn
*/
private boolean isDelimChar(char c) {
return (allwaysDelimiter.indexOf(c) >= 0) || // ver.5 all white -TAB -Blank is delimiter
( delimiterString != null ? delimiterString.indexOf(c) != -1 :false);
}
/**
* Setter hvilke tegn som skal brukes som skilletegn.. Whitespace -blank -tab is allways in
* delimiter string
* @param delimiter teksten med tegn som skal brukes som skilletegn.
* @since versjon 2
* @see #resetDelimiter
* @see #getDelimiter
*/
public void setDelimiter(String delimiter) {
delimiterString = delimiter; // add whitespace -blank-tab ver.5.0
if (delimiter != null && delimiter.indexOf(allwaysDelimiter)== -1) delimiter = delimiter + allwaysDelimiter;
if(! notEmpty(lastDelimiterString)) lastDelimiterString = delimiter; //ver 4.0
}
/**
* Setter skilletegn til forh?ndsvalgt
* standardverdi, som er alle blanke tegn.
* @since versjon 2
* @see #setDelimiter
* @see #getDelimiter
*/
public void resetDelimiter() {
delimiterString = allwaysDelimiter;
}
/**
* Returnerer skilletegnteksten. Hvis
* teksten som returneres er null
betyr det at alle
* blanke tegn er skilletegn (det er ogs? forh?ndsvalgt).
* @return en peker til teksten med skilletegn
* @since versjon 2
*/
public String getDelimiter() {
return delimiterString;
}
/**
* Gir hvilken linje som leses n?. F?rste inputlinje er linje nummer 0.
* @return linjenummeret til linjen som leses n?.
*/
public int getLineNumber() {
return lineNumber;
}
/**
* Leser og returnerer resten av en linje (linjeskifttegnet leses,
* men returneres ikke). Hvis linjen som leses kun bestod av et
* linjeskift-tegn, leses og returneres neste linje.
* Hopper f?rst over evt. gammel, egendefinert delimiter string.
* @return en linje med tekst, eller null
hvis det
* ikke finnes mer ? lese.
* @throws IOException hvis det oppst?r en io-feil.
* @see #readLine
*/
public String inLine() throws IOException {
if(ITEM_READ) skipLastDelimiter() ; // ver 5
String s = bf.readLine();
if (s.equals("")) {
s = bf.readLine();
lineNumber++;
}
lineNumber++;
ITEM_READ=false;
return s;
}
/**
* Leser og returnerer resten av linja. Linjeskifttegn leses, men
* returneres ikke som en del av teksten. Hvis linja kun inneholdt
* et linjeskifttegn betyr returneres en tom tekst
* (""
).
* @return en linje med tekst, eller null
* hvis et ikke finnes mer ? lese.
* @throws IOException hvis det oppst?r en io-feil.
* @see #inLine
* @since versjon 2
*/
public String readLine() throws IOException {
lineNumber++;
ITEM_READ = false;
return bf.readLine();
}
/**
* Leser og returnerer et tegn. Hvis parameteren er true
, returnes
* f?rste tegnet som ikke h?rer til blant skilletegn.,
* hvis parameteren er false
* returneres det f?rste uleste tegnet (uansett om det er skilletegn eller ikke).
* @return tegnet som ble lest
* @throws IOException hvis det oppst?r en io-feil.
* @see #nextChar
*/
public char inChar(boolean separator) throws IOException {
return getChar(separator);
}
/**
* Leser og returneres det f?rste uleste tegnet (uansett om det er
* skilletegn eller ikke).
* @return tegnet som ble lest.
* @throws IOException hvis det oppst?r en io-feil.
* @see #nextChar
*/
public char inChar() throws IOException {
return getChar(false);
}
/**
* Leser og returnerer det f?rste uleste tegnet som ikke er et av
* skilletegnene i teksten sep
eller de blanke tegnene som alltid er skilletegn.
* @param sep teksten med skilletegn
* @return f?rste tegn etter innledende skilletegn
* @throws IOException hvis det oppst?r en io-feil.
*/
public char inChar(String sep) throws IOException {
return getChar(sep);
}
/**
* Leser og returnerer et tegn. Avhengig av parameteren, tas det hensyn til
* skilletegnene eller ikke.
* @param separator true = hopp over skilletegn og returner f?rste ikke-skilletegn.
* false = returner neste tegn (uansett, skilletegn eller ikke).
* @return tegnet som ble lest.
* @since ver 5
* @throws IOException hvis det oppst?r en io-feil.
* @see #nextChar
*/
private char getChar(boolean separator) throws IOException {
if(separator) skipSeparator();
char c = (char) bf.read();
if (newLine) {
lineNumber++;
newLine = false;
}
if (isNewLineChar(c)) {
newLine = true;
}
ITEM_READ= separator; // true => read Char as item (skip delimiters)
return c;
}
/**
* Leser og returnerer det f?rste tegn
* Hvis du vil lese neste tegn p? filen uansett hva det er,
* bruk: getChar(false)
.
* @since ver 5
* @return tegnet som ble lest.
* @throws IOException hvis det oppst?r en io-feil.
* @see #nextChar
*/
private char getChar() throws IOException {
return getChar(false);
}
/**
* Leser og returnerer det f?rste uleste tegnet som ikke er et av
* skilletegnene i teksten sep
* @param sep teksten med skilletegn
* @return f?rste tegn etter innledende skilletegn
* @throws IOException hvis det oppst?r en io-feil.
*/
private char getChar(String sep) throws IOException {
String old = getDelimiter();
setDelimiter(sep);
try {
skipSeparator();
} finally {
setDelimiter(old);
}
return getChar(false);
}
/**
* Tester om det ikke finnes mer ? lese. For lesing fra fil vil
* det v?re sant n?r alt p? fila er lest. For lesing fra tastatur
* vil det bety at kall p? en lesemetode vil blokkere,
* dvs. vente p? input fra brukeren. Hvis det leses tegnvis eller linjevis
* vil denne metoden ikke flytte lesemark?ren.
* @return true
hvis det ikke finnes flere uleste tegn.
* @throws IOException hvis det oppst?r en io-feil.
*/
public boolean endOfFile() throws IOException {
if(ITEM_READ) skipLastDelimiter();
return !ready();
}
/**
* Leser og returnerer neste tegn som ikke er et skilletegn. Hvis ikke flere slike finnes
* returneres verdien -1 omtypet til en char. Dette er det samme
* tegnet som returneres ved slutt p? fil.
* @return neste ikke-blanke tegn
* @throws IOException hvis det oppst?r en io-feil.
* @since versjon 2
*/
public char nextChar() throws IOException {
char c;
do {
c = getChar(false);
} while (ready() && isDelimChar(c));
return isDelimChar(c) ?
(char) -1 : c;
}
/**
* Sjekker om det finnes uleste tegn som ikke er et av
* skilletegnene.
* @return true
hvis det finnes uleste tegn som ikke
* er definert som skilletegn.
* @throws IOException hvis det oppst?r en io-feil.
* @see #nextChar
* @since versjon 2
*/
public boolean hasNextChar() throws IOException {
if (!ready()) {
return false;
}
mark();
char c;
do {
c = read();
} while (ready() && isDelimChar(c));
reset();
return Character.isDefined(c) && !isDelimChar(c);
}
/**
* Sjekker om det finnes uleste tegn som ikke er blant skilletegnene i teksten
* sep
.
* @param sep teksten med skilletegn
* @return true
hvis det finnes uleste tegn som ikke
* er et skilletegn.
* @throws IOException hvis det oppst?r en io-feil.
* @see #inChar(String)
* @since versjon 2
*/
public boolean hasNextChar(String sep) throws IOException {
String old = getDelimiter();
setDelimiter(sep);
boolean b;
try {
b = hasNextChar();
} finally {
setDelimiter(old);
}
return b;
}
/**
* Flytter lesehodet frem slik at neste uleste tegn er et
* ikke-blankt tegn (evt. slutt p? fil/input)
* @see #skipSep(String)
* @throws IOException hvis det oppst?r en io-feil.
*/
public void skipWhite() throws IOException {
mark();
char c = getChar(false);
while (Character.isDefined(c) && Character.isWhitespace(c)) {
mark();
c = getChar(false);
}
reset();
}
/**
* Flytter lesehodet frem slik at neste uleste tegn ikke er et skilletegn (evt. slutt p? fil/input)
* @throws IOException hvis det oppst?r en io-feil.
* @since versjon 2
*/
public void skipSep() throws IOException {
skipSeparator();
}
/**
* Flytter lesehodet frem slik at neste uleste tegn ikke er et skilletegn (evt. slutt p? fil/input)
* @throws IOException hvis det oppst?r en io-feil.
* @since versjon 2
*/
private void skipSeparator() throws IOException {
mark();
char c = getChar(false);
while (Character.isDefined(c) && isDelimChar(c)) {
mark();
c = getChar(false);
}
reset();
}
/**
* Flytter lesehodet frem slik at neste uleste tegn ikke er et skilletegnene definert i teksten
* sep
(evt. slutt p? fil/input).
* @param sep teksten med skilletegn.
* @throws IOException hvis det oppst?r en io-feil.
*/
public void skipSep(String sep) throws IOException {
skipSeparator(sep);
}
/**
* Flytter lesehodet frem slik at neste uleste tegn ikke er et skilletegnene definert i teksten
* sep
(evt. slutt p? fil/input).
* @param sep teksten med skilletegn.
* @throws IOException hvis det oppst?r en io-feil.
*/
private void skipSeparator(String sep) throws IOException {
String old = getDelimiter();
setDelimiter(sep);
try {
skipSeparator();
} finally {
setDelimiter(old);
if(notEmpty(sep))lastDelimiterString = sep; // ver 4.0
}
}
/**
* Leser og returnerer en gruppe med tegn. En gruppe med tegn er
* tegnene som finnes mellom to skilletegn.
*
* @return et gruppe med tegn
* @throws IOException hvis det oppst?r en io-feil.
* @see #setDelimiter
*/
public String inWord() throws IOException {
return inWord(null);
}
/**
* Leser og returnerer en gruppe med tegn. sep
. En
* gruppe med tegn er tegnene som finnes mellom to skilletegnene i teksen sep
.
* I tillegg hoppes over alle innledende blanke tegn og
* alle 'rester' fra evt. gamle skilletegn (fom. ver 4.0)
* @param sep tekst med tegn som skal brukes som skilletegn
* @return en gruppe med tegn
* @throws IOException hvis det oppst?r en io-feil.
*/
public String inWord(String sep) throws IOException {
String old = getDelimiter();
// ver 4 - skip rest of lastDelimiterString if notEmpty
skipLastDelimiter();
if (notEmpty(sep)) {
setDelimiter(sep);
}
try {
ITEM_READ = true;
return next();
} finally {
if (notEmpty(sep))
lastDelimiterString = sep; // ver 4
setDelimiter(old);
}
}
/**
* Sjekker om det finnes flere uleste grupper av tegn som ikke er
* blant skilletegnene. Legg merke til
* at metoden ikke blokerer og venter p? input fra bruker (gjelder
* lesing fra tastatur). Det vil si at det kun sjekkes uleste tegn
* som allerede er i in-bufferet.
* @return true
hvis det finnes minst ett ulest
* ikke-blankt tegn.
* @throws IOException hvis det oppst?r en io-feil.
* @since versjon 2
*/
public boolean hasNext() throws IOException {
return hasNext(null);
}
/**
* Sjekker om det finnes flere uleste grupper av tegn som ikke er
* blant skilletegnene i teksten
* sep
. Legg merke til at metoden ikke blokerer og
* venter p? input fra bruker (gjelder lesing fra tastatur). Det
* vil si at det kun sjekkes uleste tegn som allerede er i in-bufferet.
* @return true
hvis det finnes minst ett ulest
* ikke-blankt tegn.
* @throws IOException hvis det oppst?r en io-feil.
* @since versjon 2
*/
public boolean hasNext(String sep) throws IOException {
return lookAtNext(sep) != null;
}
/**
* Tester slutt p? fil. Samme som: !hasNext( String sep);
*/
public boolean lastItem(String sep) throws IOException {
return ! hasNext(sep);
}
/**
* Tester slutt p? fil. Samme som: !hasNext();
*/
public boolean lastItem() throws IOException {
return ! hasNext();
}
/**
* Leser neste gruppe med tegn, og tolker dette som en boolsk
* verdi. Hvis gruppen med tegn tilsvarer teksten "true"
* returneres true
ellers returneres
* false
. En gruppe med tegn er tegnene som finnes
* mellom to skilletegn.
* @return neste gruppe med tegn tolket som en boolean
* @throws IOException hvis det oppst?r en io-feil.
* @since versjon 2
*/
public boolean inBoolean() throws IOException {
return inBoolean(null);
}
/**
* Leser neste gruppe med tegn. Hvis gruppen med tegn tilsvarer
* teksten "true" returneres true
ellers returneres
* false
. En gruppe med tegn er tegnene som finnes
* mellom to av skilletegnene i teksten
* sep
* @return neste gruppe med tegn tolket som en boolean
* @throws IOException hvis det oppst?r en io-feil.
* @since versjon 2
*/
public boolean inBoolean(String sep) throws IOException {
//return Boolean.parseBoolean(inWord(sep)); // Java 1.5 am-ut
return inWord(sep).equals("true"); // java 1.4 am
}
/**
* Som {@link #hasNext}, men tester om neste gruppe kan tolkes som
* en boolsk verdi.
* @return true
hvis neste gruppe av tegn kan tolkes
* som en boolsk verdi.
* @throws IOException hvis det oppst?r en io-feil.
* @see #inBoolean
* @since versjon 2
*/
public boolean hasNextBoolean() throws IOException {
return hasNextBoolean(null);
}
/**
* Som {@link #hasNext(String)}, men tester om neste gruppe kan
* tolkes som en boolsk verdi.
* @param sep teksten med skilletegn
* @return true
hvis neste gruppe av tegn kan tolkes
* som en boolsk verdi.
* @throws IOException hvis det oppst?r en io-feil.
* @see #inBoolean(String)
* @since versjon 2
*/
public boolean hasNextBoolean(String sep) throws IOException {
return lookAtNext(sep) != null;
}
/**
* Leser neste gruppe med tegn, og returnerer denne tolket som en
* byte. For konvertering fra tekst til tall brukes
* desimaltallsystemet. Hvis teksten ikke lar seg oversette til en
* byte, kastes en {@link NumberFormatException}. En gruppe med
* tegn er tegnene mellom to av skilletegnene.
* @return neste gruppe med tegn tolket som en byte.
* @throws IOException hvis det oppst?r en io-feil.
* @throws NumberFormatException hvis tegnene ikke lot seg tolke
* som en byte.
* @see Byte#parseByte
* @since versjon 2
*/
public byte inByte() throws IOException, NumberFormatException {
return inByte(null);
}
/**
* Leser neste gruppe med tegn, og returnerer denne tolket som en
* byte. For konvertering fra tekst til tall brukes
* desimaltallsystemet. Hvis teksten ikkel ar seg oversette til en
* byte, kastes en {@link NumberFormatException}. En gruppe med
* tegn er tegnene mellom to av skilletegnene i teksten sep
.
* false
* @return neste gruppe med tegn tolket som en boolean
* @throws IOException hvis det oppst?r en io-feil.
* @since versjon 2
*/
public byte inByte(String sep) throws IOException, NumberFormatException {
try {
return Byte.parseByte(inWord(sep));
} catch (NumberFormatException nfe) {
throw new NumberFormatException(makeMsg(nfe));
}
}
/**
* Tester om neste gruppe med tegn kan konverteres til en
* byte. Det antas at teksten er skrevet i desimaltallsystemet. En
* gruppe med tegn er tegnene mellom to skilletegn.
* @return true
hvis neste gruppe med tegn lar seg
* konvertere til en byte.
* @throws IOException hvis det oppst?r en io-feil.
* @see #inByte
* @see Byte#parseByte
* @since versjon 2
*/
public boolean hasNextByte() throws IOException {
return hasNextByte(null);
}
/**
* Tester om neste gruppe med tegn kan konverteres til en
* byte. Det antas at teksten er skrevet i det
* desimaltallsystemet. En gruppe med tegn er tegnene mellom to av
* skilletegnene i teksten
* sep
* @return true
hvis neste gruppe med tegn lar seg
* konvertere til en byte.
* @param sep teksten med skilletegn.
* @throws IOException hvis det oppst?r en io-feil.
* @see #inByte(String)
* @see Byte#parseByte
* @since versjon 2
*/
public boolean hasNextByte(String sep) throws IOException {
try {
Byte.parseByte(inWord(sep));
return true;
} catch (NumberFormatException nfe) { // not byte
return false;
}
}
/**
* Leser neste gruppe med tegn, og returnerer denne tolket som en
* double. For kokvertering fra tekst til tall brukes
* desimaltallsystemet. Hvis teksten ikke lar seg oversette til en
* double, kastes en {@link NumberFormatException}. En gruppe med
* tegn er tegnene mellom to skilletegn.
* @return neste gruppe med tegn tolket som en double.
* @throws IOException hvis det oppst?r en io-feil.
* @throws NumberFormatException hvis tegnene ikke lot seg tolke
* som en double.
* @see Double#parseDouble
*/
public double inDouble() throws IOException, NumberFormatException {
return inDouble(null);
}
/**
* Leser neste gruppe med tegn, og returnerer denne tolket som en
* double. For kokvertering fra tekst til tall brukes
* desimaltallsystemet. Hvis teksten ikke lar seg oversette til en
* double, kastes en {@link NumberFormatException}. En gruppe med
* tegn er tegnene mellom to av skilletegnene i teksten
* sep
.
* @return neste gruppe med tegn tolket som en double.
* @throws IOException hvis det oppst?r en io-feil.
* @throws NumberFormatException hvis tegnene ikke lot seg tolke
* som en double.
* @see Double#parseDouble
*/
public double inDouble(String sep)
throws IOException, NumberFormatException {
try {
return Double.parseDouble(inWord(sep));
} catch (NumberFormatException nfe) {
throw new NumberFormatException(makeMsg(nfe));
}
}
/**
* Tester om neste gruppe med tegn kan konverteres til en
* double. Det antas at teksten er skrevet i
* desimaltallsystemet. En gruppe med tegn er tegnene mellom to skilletegn.
* @return true
hvis neste gruppe med tegn lar seg
* konvertere til en double.
* @throws IOException hvis det oppst?r en io-feil.
* @see #inDouble
* @see Double#parseDouble(String)
* @since versjon 2
*/
public boolean hasNextDouble() throws IOException {
return hasNextDouble(null);
}
/**
* Tester om neste gruppe med tegn kan konverteres til en
* Double. Det antas at teksten er skrevet i det
* desimaltallsystemet. En gruppe med tegn er tegnene mellom to av
* skilletegnene i teksten
* sep
eller de blanke tegnene som alltid er skilletegn.
* @return true
hvis neste gruppe med tegn lar seg
* konvertere til en byte.
* @param sep teksten med skilletegn.
* @throws IOException hvis det oppst?r en io-feil.
* @see #inDouble(String)
* @see Double#parseDouble(String)
* @since versjon 2
*/
public boolean hasNextDouble(String sep) throws IOException {
try {
Double.parseDouble(lookAtNext(sep));
return true;
} catch (NumberFormatException nfe) { // not double
return false;
}
}
/**
* Leser neste gruppe med tegn, og returnerer denne tolket som en
* double. For kokvertering fra tekst til tall brukes
* desimaltallsystemet. Hvis teksten ikke lar seg oversette til en
* float, kastes en {@link NumberFormatException}. En gruppe med
* tegn er tegnene mellom to skilletegn.
* @return neste gruppe med tegn tolket som en float.
* @throws IOException hvis det oppst?r en io-feil.
* @throws NumberFormatException hvis tegnene ikke lot seg tolke
* som en float.
* @see Float#parseFloat(String)
* @since versjon 2
*/
public float inFloat()
throws IOException, NumberFormatException {
return inFloat(null);
}
/**
* Leser neste gruppe med tegn, og returnerer denne tolket som en
* float. For kokvertering fra tekst til tall brukes
* desimaltallsystemet. Hvis teksten ikke lar seg oversette til en
* float, kastes en {@link NumberFormatException}. En gruppe med
* tegn er tegnene mellom to av skilletegnene i teksten
* sep
eller de blanke tegnene som alltid er skilletegn.
* @return neste gruppe med tegn tolket som en float.
* @param sep teksten med skilletegn.
* @throws IOException hvis det oppst?r en io-feil.
* @throws NumberFormatException hvis tegnene ikke lot seg tolke
* som en float.
* @see Float#parseFloat(String)
* @since versjon 2
*/
public float inFloat(String sep)
throws IOException, NumberFormatException {
try {
return Float.parseFloat(inWord(sep));
} catch (NumberFormatException nfe) {
throw new NumberFormatException(makeMsg(nfe));
}
}
/**
* Tester om neste gruppe med tegn kan konverteres til en
* float. Det antas at teksten er skrevet i
* desimaltallsystemet. En gruppe med tegn er tegnene mellom to skilletegn.
* @return true
hvis neste gruppe med tegn lar seg
* konvertere til en float.
* @throws IOException hvis det oppst?r en io-feil.
* @see #inFloat
* @see Float#parseFloat(String)
* @since versjon 2
*/
public boolean hasNextFloat() throws IOException {
return hasNextFloat(null);
}
/**
* Tester om neste gruppe med tegn kan konverteres til en
* float. Det antas at teksten er skrevet i det
* desimaltallsystemet. En gruppe med tegn er tegnene mellom to av
* skilletegnene i teksten
* sep
eller de blanke tegnene som alltid er skilletegn.
* @return true
hvis neste gruppe med tegn lar seg
* konvertere til en byte.
* @param sep teksten med skilletegn.
* @throws IOException hvis det oppst?r en io-feil.
* @see #inFloat(String)
* @see Float#parseFloat(String)
* @since versjon 2
*/
public boolean hasNextFloat(String sep) throws IOException {
try {
Float.parseFloat(lookAtNext(sep));
return true;
} catch (NumberFormatException nfe) { // not float
return false;
}
}
/**
* Leser neste gruppe med tegn, og returnerer denne tolket som en
* int. For kokvertering fra tekst til tall brukes
* desimaltallsystemet. Hvis teksten ikke lar seg oversette til en
* int, kastes en {@link NumberFormatException}. En gruppe med
* tegn er tegnene mellom to skilletegn.
* @return neste gruppe med tegn tolket som en int.
* @throws IOException hvis det oppst?r en io-feil.
* @throws NumberFormatException hvis tegnene ikke lot seg tolke
* som en int.
* @see Integer#parseInt(String)
*/
public int inInt() throws IOException, NumberFormatException {
return inInt(null);
}
/**
* Leser neste gruppe med tegn, og returnerer denne tolket som en
* int. For kokvertering fra tekst til tall brukes
* desimaltallsystemet. Hvis teksten ikke lar seg oversette til en
* int, kastes en {@link NumberFormatException}. En gruppe med
* tegn er tegnene mellom to av skilletegnene i teksten
* sep
eller de blanke tegnene som alltid er skilletegn.
* @return neste gruppe med tegn tolket som en int.
* @throws IOException hvis det oppst?r en io-feil.
* @throws NumberFormatException hvis tegnene ikke lot seg tolke
* som en int.
* @see Integer#parseInt(String)
*/
public int inInt(String sep) throws IOException, NumberFormatException {
try {
return Integer.parseInt(inWord(sep));
} catch (NumberFormatException nfe) {
throw new NumberFormatException(makeMsg(nfe));
}
}
/**
* Tester om neste gruppe med tegn kan konverteres til en
* int. Det antas at teksten er skrevet i
* desimaltallsystemet. En gruppe med tegn er tegnene mellom to skilletegn.
* @return true
hvis neste gruppe med tegn lar seg
* konvertere til en int.
* @throws IOException hvis det oppst?r en io-feil.
* @see #inInt
* @see Integer#parseInt(String)
* @since versjon 2
*/
public boolean hasNextInt() throws IOException {
return hasNextInt(null);
}
/**
* Tester om neste gruppe med tegn kan konverteres til en
* int. Det antas at teksten er skrevet i det
* desimaltallsystemet. En gruppe med tegn er tegnene mellom to av
* skilletegnene i teksten
* sep
eller de blanke tegnene som alltid er skilletegn.
* @return true
hvis neste gruppe med tegn lar seg
* konvertere til en byte.
* @param sep teksten med skilletegn.
* @throws IOException hvis det oppst?r en io-feil.
* @see #inInt(String)
* @see Integer#parseInt(String)
* @since versjon 2
*/
public boolean hasNextInt(String sep) throws IOException {
try {
Integer.parseInt(lookAtNext(sep));
return true;
} catch (NumberFormatException nfe) { // not int.
return false;
}
}
/**
* Leser neste gruppe med tegn, og returnerer denne tolket som en
* long. For kokvertering fra tekst til tall brukes
* desimaltallsystemet. Hvis teksten ikke lar seg oversette til en
* long, kastes en {@link NumberFormatException}. En gruppe med
* tegn er tegnene mellom to skilletegn.
* @return neste gruppe med tegn tolket som en long.
* @throws IOException hvis det oppst?r en io-feil.
* @throws NumberFormatException hvis tegnene ikke lot seg tolke
* som en long.
* @see Long#parseLong(String)
* @since versjon 2
*/
public long inLong() throws IOException, NumberFormatException {
return inLong(null);
}
/**
* Leser neste gruppe med tegn, og returnerer denne tolket som en
* long. For kokvertering fra tekst til tall brukes
* desimaltallsystemet. Hvis teksten ikke lar seg oversette til en
* long, kastes en {@link NumberFormatException}. En gruppe med
* tegn er tegnene mellom to av skilletegnene i teksten
* sep
.eller de blanke tegnene som alltid er skilletegn.
* @return neste gruppe med tegn tolket som en long.
* @param sep teksten med skilletegn.
* @throws IOException hvis det oppst?r en io-feil.
* @throws NumberFormatException hvis tegnene ikke lot seg tolke
* som en long.
* @see Long#parseLong(String)
* @since versjon 2
*/
public long inLong(String sep) throws IOException, NumberFormatException {
try {
return Long.parseLong(inWord(sep));
} catch (NumberFormatException nfe) {
throw new NumberFormatException(makeMsg(nfe));
}
}
/**
* Tester om neste gruppe med tegn kan konverteres til en
* long. Det antas at teksten er skrevet i
* desimaltallsystemet. En gruppe med tegn er tegnene mellom to skilletegn.
* @return true
hvis neste gruppe med tegn lar seg
* konvertere til en long.
* @throws IOException hvis det oppst?r en io-feil.
* @see #inLong
* @see Long#parseLong(String)
* @since versjon 2
*/
public boolean hasNextLong() throws IOException {
return hasNextLong(null);
}
/**
* Tester om neste gruppe med tegn kan konverteres til en
* long. Det antas at teksten er skrevet i det
* desimaltallsystemet. En gruppe med tegn er tegnene mellom to av
* skilletegnene i teksten
* sep
eller de blanke tegnene som alltid er skilletegn.
* @return true
hvis neste gruppe med tegn lar seg
* konvertere til en byte.
* @param sep teksten med skilletegn.
* @throws IOException hvis det oppst?r en io-feil.
* @see #inLong(String)
* @see Long#parseLong(String)
* @since versjon 2
*/
public boolean hasNextLong(String sep) throws IOException {
try {
Long.parseLong(lookAtNext(sep));
return true;
} catch (NumberFormatException nfe) { // not long
return false;
}
}
/**
* Leser neste gruppe med tegn, og returnerer denne tolket som en
* short. For kokvertering fra tekst til tall brukes
* desimaltallsystemet. Hvis teksten ikke lar seg oversette til en
* short, kastes en {@link NumberFormatException}. En gruppe med
* tegn er tegnene mellom to skilletegn.
* @return neste gruppe med tegn tolket som en short.
* @throws IOException hvis det oppst?r en io-feil.
* @throws NumberFormatException hvis tegnene ikke lot seg tolke
* som en short.
* @see Short#parseShort(String)
* @since versjon 2
*/
public short inShort() throws IOException, NumberFormatException {
return inShort(null);
}
/**
* Leser neste gruppe med tegn, og returnerer denne tolket som en
* short. For kokvertering fra tekst til tall brukes
* desimaltallsystemet. Hvis teksten ikke lar seg oversette til en
* short, kastes en {@link NumberFormatException}. En gruppe med
* tegn er tegnene mellom to av skilletegnene i teksten
* sep
eller de blanke tegnene som alltid er skilletegn.
* @return neste gruppe med tegn tolket som en short.
* @throws IOException hvis det oppst?r en io-feil.
* @throws NumberFormatException hvis tegnene ikke lot seg tolke
* som en short.
* @see Short#parseShort(String)
* @since versjon 2
*/
public short inShort(String sep)
throws IOException, NumberFormatException {
try {
return Short.parseShort(inWord(sep));
} catch (NumberFormatException nfe) {
throw new NumberFormatException(makeMsg(nfe));
}
}
/**
* Tester om neste gruppe med tegn kan konverteres til en
* short. Det antas at teksten er skrevet i
* desimaltallsystemet. En gruppe med tegn er tegnene mellom to skilletegn.
* @return true
hvis neste gruppe med tegn lar seg
* konvertere til en short.
* @throws IOException hvis det oppst?r en io-feil.
* @see #inShort
* @see Short#parseShort(String)
* @since versjon 2
*/
public boolean hasNextShort() throws IOException {
return hasNextShort(null);
}
/**
* Tester om neste gruppe med tegn kan konverteres til en
* short. Det antas at teksten er skrevet i det
* desimaltallsystemet. En gruppe med tegn er tegnene mellom to av
* skilletegnene i teksten
* sep
eller de blanke tegnene som alltid er skilletegn.
* @return true
hvis neste gruppe med tegn lar seg
* konvertere til en byte.
* @param sep teksten med skilletegn.
* @throws IOException hvis det oppst?r en io-feil.
* @see #inShort(String)
* @see Short#parseShort(String)
* @since versjon 2
*/
public boolean hasNextShort(String sep) throws IOException {
try {
Short.parseShort(lookAtNext(sep));
return true;
} catch (NumberFormatException nfe) { // not a short
return false;
}
}
/**
* Tester om det finnes tegn ? lese. Hvis det ikke finnes tegn ?
* lese vil lesemetodene blokkere og vente p? input fra brukeren.
* @return true
hvis det finnes tegn ? lese.
* @throws IOException
*/
public boolean ready() throws IOException {
return bf.ready();
}
/**
* Lukker leseren
* @see BufferedReader#close
* @throws IOException hvis det oppst?r en io-feil.
*/
public void close() throws IOException {
bf.close();
}
}