目录
1.读取数据
空白字符:空格、换行符(一般隐藏)、制表符(Tab)
in.nextInt() 他会忽略前导的空白字符,读取一个数字,直到遇到下一个空白字符。
in.next() 他会忽略前导的空白字符,读取一个字符串,直到遇到下一个空白字符。
in.nextLine() 他会读取下一行文本(空白字符也会被读取),直到读取到换行符(\n),换行符会被读掉,但不会包含在返回的String中。如果第一个读取的就是换行符,那就停止读取,只读到一个换行符。
1.1不停的读取数据同时处理
注意:hasNext()方法会阻塞式的检测有没有下一个数据,在他的内部会不停的循环检测
public boolean hasNext() {
ensureOpen();
saveState();
modCount++;
while (!sourceClosed) { //数据源没有关闭就一直循环
if (hasTokenInBuffer()) { //直到缓存区中有数据才会返回,不然就会一直循环等待
return revertState(true);
}
readInput();
}
boolean result = hasTokenInBuffer();
return revertState(result);
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
int a = in.nextInt();
int b = in.nextInt();
int c = a + b;
System.out.println(c);
}
}
}
1.2读取一行的数据
c语言网1003
注意:这里的in.nextLine() 会读取到换行符,所以一般在in.nextLine()之前先用一个in.nextLine()把换行符读掉,这里因为就一行数据,数据之前没有换行符,不需要吧换行符读掉。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s = in.nextLine(); //这里返回的是String
for(int i = 0;i<s.length();i++){
char ch = s.charAt(i);
if(ch>='a' && ch<='u' || ch>='A' && ch<='U'){
ch=(char)(ch+4);
}
if(ch>='w' && ch<='z' || ch >='W'&& ch<='Z'){
ch = (char)(ch + 4 - 26); //假设z后面的四个数是x1,x2,x3,x4 将x1,x2,x3,x4-26转为a,b,c,d
}
System.out.print(ch);
}
}
}
1.3谨慎使用整行读
acwing5050题
输入格式
第一行包含整数 T,表示共有 T组测试数据。
每组数据第一行包含整数 n。
第二行包含一个长度为 n的由小写字母构成的字符串。
输出格式
每组数据输出占一行,输出重新排序后的字符串
输入样例:
2
3
cba
3
acb
输出样例:
abc
abc
import java.util.Scanner;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int T = in.nextInt();
for(int i=0;i<T;i++){
int len=in.nextInt();
in.nextLine();
String s = in.nextLine();
char[] c = s.toCharArray();
Arrays.sort(c);
System.out.println(c);
}
}
}
方法2,直接用in.next(); 忽略前导的空白字符。
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int T = in.nextInt();
for(int i=0;i<T;i++){
int len=in.nextInt();
String s = in.next();
char[] c = s.toCharArray();
Arrays.sort(c);
System.out.println(c);
}
}
2.字符串相关处理
String相关
String s = new String("Hello,World")
String s = "Hello,World" //String专属,不用构造器
String.charAt(i); //获取String第i个位置的元素值
StringBuilder相关
StringBuilder sb = new StringBuilder();
StringBuilder sb = new StringBuilder("Hello");
StrBuilder sb = new StrBuilder();
int i = 3;
sb.append('a'); //添加元素
sb.append('b');
sb.append('c');
sb.append('d');
sb.charAt(3); //查看某位置元素
sb.setCharAt(3,'a'); //修改某位置元素
System.out.println(sb);
3.JAVA答题通用框架
//导入类
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
//这里输入程序逻辑
}
public static void hs2(){
//函数2的逻辑。。。
}
public static void hs3(){
//函数3的逻辑。。。
}
4.# JAVA输出格式问题
右对齐输出数字
System.out.printf("%8d ",num); //冒充c语言
读取案例
给定一个长度为 n
的由小写字母构成的字符串。
请你按照 a∼z
的顺序,对字符串内的字符进行重新排序,并输出重新排序后的字符串。
输入格式
第一行包含整数 T
,表示共有 T
组测试数据。
每组数据第一行包含整数 n
。
第二行包含一个长度为 n
的由小写字母构成的字符串。
输出格式
每组数据输出占一行,输出重新排序后的字符串。
数据范围
前 3
个测试点满足 1≤T≤5
,1≤n≤10
。
所有测试点满足 1≤T≤100
,1≤n≤200
。
输入样例:
2
3
cba
3
acb
输出样例:
abc
abc
排序
对java自带的类进行按规则排序
java中,Arrays.sort() 对基本数据类型数组只能从小到大排序
对对象数组才能按照规则排序。你想从小到大排序。
Acwing5372,原题让我从小到大,现在改成从大到小排序。
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
Integer[] a = new Integer[3];
for(int i=0;i<3;i++) a[i]=in.nextInt();
Arrays.sort(a,Collections.reverseOrder());
for(int i=0;i<3;i++) System.out.print(a[i]+" ");
}
}
这里我们不能对int[] a进行按规则排序,只能对Interger[] a进行按规则排序。
对自定义的类进行按规则排序
1.自定义一个排序规则。Arrays.sort()排序对象数组时,指定规则。
具体:实现Comparator接口,实现compare方法。
public class MyComparator implements Comparator<MyClass> {
@Override
public int compare(Object o1, Object o2) {
Integer obj1 = (Integer)o1;
Integer obj2 = (Integer)o2;
return obj1.compareTo(obj2);
}
}
List<MyClass> list = new ArrayList<>();
// 添加 MyClass 对象到 list 中
Collections.sort(list, new MyComparator());
方法2
自定义方法中实现Comparable方法,实现compareTo()方法。
然后直接Arrays.sort();
public class MyClass implements Comparable<MyClass> {
private int value;
// 构造函数、getter 和 setter 方法
@Override
public int compareTo(MyClass other) {
// 定义比较规则,例如按照 value 字段升序排序
return this.value - other.value;
}
}
List<MyClass> list = new ArrayList<>();
// 添加 MyClass 对象到 list 中
Collections.sort(list);