您的位置:

如何使用StringReader类读取字符串内容

一、StringReader类简介

StringReader类是Java IO的一部分,用于从字符串中读取字符流。该类提供了几种用于读取字符流的方法。使用StringReader类可以方便地从字符串中读取字符而无需进行文件操作。

二、StringReader类的创建和基本方法

要使用StringReader类,需要先创建一个StringReader对象。StringReader对象可以使用String类型的参数进行初始化,该参数会转化为一个字符流。

String s = "Hello, World!";
StringReader reader = new StringReader(s);

使用StringReader读取字符时,常用的方法有read()和read(char[] cbuf, int off, int len)方法。其中,read()方法每次读取一个字符,返回字符的ASCII码值;read(char[] cbuf, int off, int len)方法读取len个字符,并将其存储在cbuf数组中,从off位置开始存储。如果读取到流的末尾,则返回-1。

String s = "Hello, World!";
StringReader reader = new StringReader(s);
int c;
while ((c = reader.read()) != -1) {
    // 打印读取到的ASCII码值
    System.out.println(c);
}

三、使用StringReader读取HTML标签

在读取HTML标签时,需要考虑到标签的特殊性。可以使用read(String str, int off, int len)方法,该方法将读取len个字符并存储在str字符串中,从off位置开始存储。如果读取到指定的字符(如"<")或者流的末尾,则停止读取。

String s = "<h1>Hello, World!</h1>";
StringReader reader = new StringReader(s);
char[] cbuf = new char[100];
int readCount = reader.read(cbuf, 0, 100);
String tag = "";
for (int i = 0; i < readCount && (cbuf[i] != ' ' || cbuf[i] != '>'); i++) {
    tag += cbuf[i];
}
System.out.println(tag);

四、使用StringReader读取XML文件

使用StringReader可以方便地读取XML文件。Java提供了一种将XML文件解析成Document对象的方法:使用DOM解析器。有了Document对象之后,就可以方便地获取节点和属性信息。下面的代码示例展示了使用DOM解析XML文件并读取其中的节点信息。

String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
   
    Tom
    
    18
    
   
   
    Jerry
    
    22
    
   
  ";
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
InputSource is = new InputSource(new StringReader(xml));
Document document = builder.parse(is);
NodeList personNodes = document.getElementsByTagName("person");
for (int i = 0; i < personNodes.getLength(); i++) {
    Element personElement = (Element) personNodes.item(i);
    String id = personElement.getAttribute("id");
    String name = personElement.getElementsByTagName("name").item(0).getTextContent();
    String age = personElement.getElementsByTagName("age").item(0).getTextContent();
    System.out.println("id:" + id + ", name:" + name + ", age:" + age);
}