OR62 倒置字符串
OR62 倒置字符串
import java.util.Scanner;
import java.io.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void reverse(char[] c, int left, int right) {
int l = left;
int r = right;
while(l < r) {
char temp = c[l];
c[l] = c[r];
c[r] = temp;
l++;
r--;
}
}
public static void main(String[] args) throws Throwable {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
char[] s = br.readLine().toCharArray();
int n = s.length;
reverse(s, 0, n - 1);
int left = 0;
while(left < n){
int right = left;
while(right < n && s[right] != ' ') right++;
reverse(s, left,right - 1);
while(right < n && s[right] == ' ') right++;
left = right;
}
for(char i : s) {
System.out.print(i);
}
}
}
在 Java 中,IO 流(Input/Output Streams)是一种用于处理输入和输出操作的机制。它允许程序与外部数据源(如文件、网络连接、内存缓冲区等)进行数据交互。
一、主要类型
-
字节流
- 以字节为单位进行数据传输,适合处理二进制数据,如图像、音频、视频等文件。
InputStream
是所有字节输入流的超类,用于读取字节数据。常见的子类有FileInputStream
(从文件中读取字节)、ByteArrayInputStream
(从字节数组中读取字节)等。OutputStream
是所有字节输出流的超类,用于写入字节数据。常见的子类有FileOutputStream
(向文件中写入字节)、ByteArrayOutputStream
(向字节数组中写入字节)等。
-
字符流
- 以字符为单位进行数据传输,适合处理文本文件。
Reader
是所有字符输入流的超类,用于读取字符数据。常见的子类有FileReader
(从文件中读取字符)、StringReader
(从字符串中读取字符)等。Writer
是所有字符输出流的超类,用于写入字符数据。常见的子类有FileWriter
(向文件中写入字符)、StringWriter
(向字符串中写入字符)等。
二、主要特点
-
层次结构清晰
- Java 的 IO 流体系具有明确的层次结构,方便开发者根据不同的需求选择合适的流类进行操作。
- 可以通过组合多个流来实现更复杂的功能,例如使用缓冲流来提高读写效率。
-
可扩展性强
- 开发者可以根据自己的需求实现自定义的流类,以满足特定的输入输出需求。
-
异常处理
- IO 流操作可能会抛出
IOException
等异常,开发者需要在代码中进行适当的异常处理,以确保程序的稳定性和可靠性。
- IO 流操作可能会抛出
三、用途
-
文件读写
- 可以使用文件输入流和文件输出流来读取和写入文件中的数据。
-
网络通信
- 在网络编程中,通过输入流和输出流来实现客户端与服务器之间的数据传输。
-
内存操作
- 可以使用字节数组输入流和字节数组输出流在内存中进行数据的读写操作。
-
数据转换
- 可以使用各种流类来进行数据的转换,例如将字节流转换为字符流,或者将字符流转换为字节流。
BufferedReader
在 Java 中,BufferedReader
是一个字符输入流包装类,它可以提高字符输入流的读取效率。以下是BufferedReader
的一些常用方法:
一、读取字符数据
-
int read()
:读取单个字符并以整数形式返回。如果已到达流末尾,则返回 -1。- 示例:
BufferedReader br = new BufferedReader(new FileReader("test.txt")); int ch = br.read(); while (ch!= -1) { System.out.print((char)ch); ch = br.read(); } br.close();
- 示例:
-
int read(char[] cbuf, int off, int len)
:将字符读入数组的一部分。cbuf
是目标字符数组;off
是开始存储字符的偏移量;len
是要读取的最大字符数。- 示例:
BufferedReader br = new BufferedReader(new FileReader("test.txt")); char[] buffer = new char[1024]; int charsRead = br.read(buffer, 0, buffer.length); while (charsRead > 0) { System.out.print(new String(buffer, 0, charsRead)); charsRead = br.read(buffer, 0, buffer.length); } br.close();
二、读取整行数据
String readLine()
:读取一行文本。如果已到达流末尾,则返回 null。- 示例:
BufferedReader br = new BufferedReader(new FileReader("test.txt")); String line; while ((line = br.readLine())!= null) { System.out.println(line); } br.close();
- 示例:
三、其他方法
-
void close()
:关闭该流并释放与之关联的所有资源。- 示例:
BufferedReader br = new BufferedReader(new FileReader("test.txt")); // 读取操作 br.close();
- 示例:
-
boolean ready()
:判断此流是否已准备好被读取。如果下一个read()
调用不会阻塞,则返回 true;否则返回 false。- 示例:
BufferedReader br = new BufferedReader(new FileReader("test.txt")); if (br.ready()) { System.out.println("Stream is ready to be read."); } else { System.out.println("Stream is not ready."); } br.close();
- 示例:
java的IO流是什么