这个是这周的算法题
答案
package 算法;
import java.util.Scanner;
public class 字符串拼接 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
System.out.println(pingjie(str));
}
public static String pingjie(String str) {
int len = 2;
while(str.length()/len>0) {
if(str.length()%len!=0) {
len++;
continue;
}else {
StringBuilder sb = new StringBuilder();
for(int i=0;i<len;i++) {
sb.append(str.substring(0, str.length()/len));
}
if(sb.toString().equals(str)) {
return str.substring(0, str.length()/len);
}
len++;
}
}
return "false";
}
}
做题思路:
这个说到字符串拼接因为使用子字符串拼接的,查了查帮助文档找到用这个方法做
String substring(int beginIndex, int endIndex)
返回一个新字符串,它是此字符串的一个子字符串。
然后就定义一个函数 因为他如果是对的话就一直一个字符串循环下去 所以用等分法处理
从二等分开始用要判断函数对len进行取余等于0的话就停止 之后创造一个存储的sb然后把满足条件的存进去 最后用equals方法进行比较如果正确返回则返回他的拼接字符串 不正确输出false。
BufferedReader
public class BufferedReaaderTest {
public static void main(String[] args) throws Exception{
//创建一个带有缓冲区的字符输入流
/*
FileReader fr = new FileReader("src\\IO\\BufferedReaderTest.java");//创建一个文件字符输入流
BufferedReader br = new BufferedReader(fr); //将文件字符输入流包装成带有缓冲区的字符输入流
*/
//根据流出现的位置 流可以分为 包装流或者 处理流 和 节点流
//FileReader fr 是一个节点流
//BufferedReadeer br 是一个包装流 或者处理流
BufferedReader br = new BufferedReader(new FileReader("src\\IO\\BufferedReaaderTest.java"));
//开始读
String temp = null;
while((temp = br.readLine())!=null) {//br.readLine()方法读取一行 但是行尾不带换行符
System.out.println(temp);//输出一行
}
//关闭
//注意 关闭的时候只需要关闭最外层的包装流(这里有一个装饰者模式)
br.close();
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190719173251532.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzOTY1OQ==,size_16,color_FFFFFF,t_70)}
用readLine()输出的行尾不带换行符会输出在一行 加上ln才会
用转换流把字节流转换成字符流
public static void main(String[] args) throws Exception{
/*
FileInputStream fis = new FileInputStream("src\\IO\\BufferedReaderTest2.java");
//转换流 将字节流转换成字符流
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(isr);
*/
//合并
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("src\\IO\\BufferedReaderTest2.java")));
String temp = null;
while((temp = br.readLine())!=null) {
System.out.println(temp);
}
br.close();
}
之后学了新的键盘输入之前的键盘输入 遇到空格之后就会结束 用BufferedReader的键盘输入会输出一行
public static void main(String[] args) throws Exception {
/*
//以前的方式
Scanner sc = new Scanner(System.in); //System.in是一个标准的输入流 默认接受键盘输入
String str = sc.next();
System.out.println("您输入了:"+str);
*/
//使用BufferedReader用来接受用户输入
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//接受输入 每次都接收一行
String str = br.readLine();
System.out.println("您输入了:"+str);
//关闭
br.close();
}
BufferedWriter的方法
public static void main(String[] args) throws Exception{
//创建一个带有缓冲区的字符输出流
//BufferedWriter bw = new BufferedWriter(new FileWriter("src\\IO\\temp04"));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("src\\IO\\temp04",true)));
//开始写
bw.write("MLXG!");
//写入一个行分隔符
bw.newLine();
bw.write("恭送一代野王");
bw.flush();
bw.close();
}
之后学BufferedReader和BufferedWriter的复制方法和以前一样
之后DateInputStream 和DateOutputStream比较特殊可以直接存储格式进去 但是读的时候只能用他读
public static void main(String[] args) throws Exception {
DataInputStream dis = new DataInputStream(new FileInputStream("src\\IO\\temp05"));
//读
//注意要使用该流读取数据 必须提前知道改文件中数据存储格式,顺序
//读的顺序和写入顺序相同
byte b = dis.readByte();
short s = dis.readShort();
int i = dis.readInt();
long l = dis.readLong();
float f = dis.readFloat();
double d = dis.readDouble();
boolean flag = dis.readBoolean();
char c = dis.readChar();
System.out.println(b);
System.out.println(s);
System.out.println(i);
System.out.println(l);
System.out.println(f);
System.out.println(d);
System.out.println(flag);
System.out.println(c);
dis.close();
}
第二周总结
这周看完IO之后 因为上周那个算法题感觉自己的泛型没看懂重新看了看泛型 虽然感觉看完感觉还是不咋会用 不过加深了一下记忆 之后写算法题。