Java解题常用方法

以前刷题都是用c++,对于java的集合运算和输入输出都不熟悉,现在记录一下。


位运算

注意取余和取模不同,但是当除数和被除数同号时,两种运算的结果相同。

//判断int型变量a是奇数还是偶数
a&1  = 0 偶数
a&1 = 1 奇数
//求平均值,比如有两个int类型变量x、y,首先要求x+y的和,再除以2,但是有可能x+y的结果会超过int的最大表示范围,所以位运算就派上用场啦。
(x&y)+((x^y)>>1);
//对于一个大于0的整数,判断它是不是2的几次方
((x&(x-1))==0)&&(x!=0)//比如有两个int类型变量x、y,要求两者数字交换,位运算的实现方法:性能绝对高效
x ^= y;
y ^= x;
x ^= y;
//求绝对值
int abs( int x )
{
    int y ;
    y = x >> 31 ;
    return (x^y)-y ;        //or: (x+y)^y 
}
//取余运算,采用位运算实现:
a % (2^n) 等价于 a & (2^n - 1)
//乘法运算   采用位运算实现
a * (2^n) 等价于 a << n
//除法运算转化成位运算
a / (2^n) 等价于 a>> n
//求相反数
(~x+1)
//对2取余
a % 2 等价于 a & 1
从控制台输入数据
//读入一个字节
read = (char) System.in.read();
//读取制定类型数据(Scanner的next()方法用以取得用户输入的字符串;nextInt()将取得的输入字符串转换为整数类型;同样,nextFloat()转换成浮点型;nextBoolean()转换成布尔型。)
Scanner scan = new Scanner(System.in);
String read = scan.nextLine();//读取一行
//使用BufferedReader(字符缓冲流)包装
BufferedReader br = new BufferedReader(new InputStreamReader(System.in ));
try {
    read = br.readLine();//读取一行
} catch (IOException e) {}
提取字符串中内容

java中没有c++里的scanf函数,无法再读取字符串的同时取得其中内容。我们使用正则表达式对内容进行提取。

String line = "qwe1.23rty";
Pattern r = Pattern.compile("qwe(.*)rty");
Matcher m = r.matcher(line);
if (m.find( )) {
    System.out.println("Found value: " + m.group(0) );
    System.out.println("Found value: " + m.group(1) );
}
double保留小数位数
//返回double(四舍五入)
double d = 1.2345;
d = (double) Math.round(d * 100) / 100;
//返回string(四舍五入)
double d = 1.2345;
String.format("%.2f", d);
String <->int
int a = Integer.parseInt(s);
String s = String.valueOf(a);
String s = new Integer(a).toString();
String和String Buffer
StringBuffer s = new StringBuffer("abc");
s.append("def");
s.deleteCharAt(2);
s.delete(0,2);
s.insert(1,"hello");
s.reverse();
sb.setCharAt(1,'p');
System.out.println(s.toString());
数组排序
int[] a = new int[]{3, 2, 1};
Arrays.sort(a);//快排
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值