java完成自定义Scanner类的编写
时间: 2023-07-29 13:11:45 浏览: 92
Java中Scanner类的用法
4星 · 用户满意度95%
好的,下面是一个简单的自定义Scanner类的示例代码:
```java
import java.io.InputStream;
import java.util.InputMismatchException;
import java.util.Scanner;
public class CustomScanner {
private InputStream inputStream;
private StringBuilder buffer;
public CustomScanner(InputStream inputStream) {
this.inputStream = inputStream;
this.buffer = new StringBuilder();
}
public String next() {
clearBuffer();
int c = read();
while (isWhiteSpace(c)) {
c = read();
}
while (!isWhiteSpace(c)) {
buffer.append((char) c);
c = read();
}
return buffer.toString();
}
public int nextInt() {
try {
return Integer.parseInt(next());
} catch (NumberFormatException e) {
throw new InputMismatchException();
}
}
private void clearBuffer() {
buffer.setLength(0);
}
private boolean isWhiteSpace(int c) {
return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
}
private int read() {
try {
int c = inputStream.read();
return c;
} catch (Exception e) {
throw new InputMismatchException();
}
}
}
```
这个自定义Scanner类包含了两个方法:`next()`和`nextInt()`。`next()`方法读取输入流中的下一个字符串,`nextInt()`方法读取输入流中的下一个整数。如果读取的字符串无法转换成整数,`nextInt()`方法会抛出一个`InputMismatchException`异常。
这个自定义Scanner类的实现方式与Java标准库中的`Scanner`类不同,它使用了字符流而不是字节流,并且没有使用正则表达式。因此,它的性能可能比Java标准库中的`Scanner`类差一些。但是,它可以作为一个基础的自定义Scanner类的示例,供你参考和扩展。
阅读全文