来自初学者收集总结的一些Java算法中值得注意的地方
一、Java字符串大小写转换的方法
Java字符串大小写转化有两种方法,其中一种是比较直接的通过字符的ASCII码的加减来实现字符大小写的转换;另外一种是利用Java特定的方法str.toUpperCase()和str.toLowerCase()来实现字符串的大小写转换。
第一种方法:
public static void main(String[]args){
char[] array = src.toCharArray();
int temp = 0;
for (int i = 0; i < array.length; i++){
temp = (int) array[i];
if (temp <= 90 && temp >= 65){ // array[i]为大写字母
array[i] = (char) (temp + 32);
} else if (temp <= 122 && temp >= 97){ // array[i]为小写字母
array[i] = (char) (temp - 32);
}
}
}
第二种方法:
public static void main(String[]args){
char[] array = src.toCharArray();
int temp = 0;
for (int i = 0; i < array.length; i++){
temp = (int) array[i];
if (temp <= 90 && temp >= 65){ // array[i]为大写字母
array[i] = (char) (temp + 32);
} else if (temp <= 122 && temp >= 97){ // array[i]为小写字母
array[i] = (char) (temp - 32);
}
}
}
二、String s = input.nextLine();和String s = input.next();的区别
简单来说,input.nextLine()是以回车为分隔符,一次取一行;而使用input.next()是以回车或空格为分隔符,一次取一个单词,当读取到空格时就会停下不再读取了。所以使用input.next()不能读取有空格的字符串。
例如以下的代码:
import java.util.Scanner;
public class ScannerString {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入字符串(nextLine()):");
String a = input.nextLine();
System.out.println(a);
System.out.println("请输入字符串(next()):");
String b = input.next();
System.out.println(b);
程序运行后,我们可以清楚的看到这两者的区别:
三、Java mathes用法
matches() 方法用于检测字符串是否匹配给定的正则表达式。即输出只为true或者false;
例如以下代码:
public class Test {
public static void main(String args[]) {
String Str = new String("www.runoob.com");
System.out.print("返回值 :" );
System.out.println(Str.matches("(.*)runoob(.*)"));
System.out.print("返回值 :" );
System.out.println(Str.matches("(.*)google(.*)"));
System.out.print("返回值 :" );
System.out.println(Str.matches("www(.*)"));
}
}
以上程序的输出结果为:
四、Java String.split()用法
Java中String.split()方法,与数组结合在一起使用,返回结果也是一个数组。该方法根据匹配给定的正则表达式来拆分字符串。
使用时要注意:
1.如果用“-”或者“/”作为分隔的话,则使用String.split("-")或者String.split("/")便可以实现将字符串分开;
如以下代码:
public class split {
public static void main(String args[]) {
String a="浙江-温州-苍南";
for (String b: a.split("-")){
System.out.println(b);
}
}
}
以上程序的输出结果为:
2、如果用“.”或者“^”或者“|”或者“*”或者“:”或者“\”等作为分隔的话,必须是如下写法,String.split("\\."),这样才能正确的分隔开,不能用String.split(".")。是因为这些字符都是转义字符,必须得加"\\”;
如以下的代码:
public class split {
public static void main(String[] args) {
String a="浙江.温州.苍南";
for (String retval: a.split("\\.")){
System.out.println(retval);
}
}
}
以上程序的运行结果也为:
3、如果在一个字符串中有多个分隔符,可以用“|”作为连字符,如字符串有“@”和“#”分隔符时,要使用String.split("@|#");但是当其中的分隔符也有第2点说的转义字符时,则他们前面也需要加上“\\”;
例如以下的代码:
public class split {
public static void main(String[] args) {
String a="浙江@温州#苍南.灵溪";
for (String retval: a.split("@|#|\\.")){
System.out.println(retval);
}
}
}
以上代码的运行结果为:
五、Java进制转换用到的方法
Java进制转换可以选择根据进制转换的步骤然后用代码一步一步实现,也可以使用Java自带的代码语句直接实现进制转换。这里重点介绍Java关于进制转换的代码语句:
首先定义n1:
int n1 = 14;
十进制转bai成十六进制:
Integer.toHexString(n1);
十进制转成八进制:
Integer.toOctalString(n1);
十进制转成二进制:
Integer.toBinaryString(12);
十六进制转成十进制:
Integer.valueOf(“FFFF”,16).toString();
十六进制转成二进制:
Integer.toBinaryString(Integer.valueOf(“FFFF”,16));
十六进制转成八进制:
Integer.toOctalString(Integer.valueOf(“FFFF”,16));
八进制转成十进制:
Integer.valueOf(“576”,8).toString();
八进制转成二进制:
Integer.toBinaryString(Integer.valueOf(“23”,8));
八进制转成十六进制:
Integer.toHexString(Integer.valueOf(“23”,8));
二进制转十进制:
Integer.valueOf(“0101”,2).toString();
二进制转八进制:
Integer.toOctalString(Integer.parseInt(“0101”, 2));
二进制转十六进制:
Integer.toHexString(Integer.parseInt(“0101”, 2));
六、Java substring() 方法
substring()方法是String类的一个方法,故该方法的调用者为String类的对象,即字符串。
str.substring(a,b)功能为:截取方法调用者(即str)的从a到b(包括a,不包括b;即含头不含尾、或[a,b)区间内的子字符串)。
如以下程序:
public class substring {
public static void main(String[] args) {
String str = "0123456789";
System.out.println(str.substring(1, 3));
}
}
以上程序的运行结果为:
七、Java根据字节码判断是否为汉字的方法
1、判断一个字符是否是中文的方法:
public static boolean isChinese(char c) {
return c >= 0x4E00 && c <= 0x9FA5;
}
2、判断一个字符串是否含有中文的方法:
public static boolean isChinese(String str) {
if (str == null) return false;
for (char c : str.toCharArray()) {
if (isChinese(c)) return true;// 有一个中文字符就返回
}
return false;
}
点赞
八、Java HashMap 的用法
首先,Java中使用HashMap需要引入两个头文件:
import java.util.HashMap;
import java.util.Map;
其次,HashMap的用法总结来说就是:
1.导入:import java.util.HashMap;
2.定义map:HashMap<K, V> map=new HashMap<K, V>(); //K和V是类,比如int 、String、double;
3.清空:void clear();
4.设置K键的值为:Vput(K,V);
5.获取K键的值:V get(K);
6.判空:boolean isEmpty();
7.获取map的大小:int size();
8.删除K键的值:V remove(K); //返回的是V,可以不接收
9.判断是否有K键的值:boolean containsKey(K);
10.判断是否有值是V:boolean containsValue(V);
例如以下代码:
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class HashMap {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
Map<String,Integer>a=new HashMap<String,Integer>();
a.put("zero",0);
a.put("one",1);
a.put("two",2);
a.put("three",3);
a.put("four",4);
a.put("five",5);
a.put("six",6);
a.put("seven",7);
a.put("eight",8);
a.put("nine",9);
String s=input.nextLine();
if (s.equals("zero + zero =")) {
break;
}
int sum=0;
String[]s2=s.split(" ");
for(int i=0;i<s2.length;i++){
if (a.containsKey(s2[i]) && !a.containsKey(s2[i+1])) {//map中的containsKey(Key)方法是判断该key在map中是否有key存在。
sum+=a.get(s2[i]);
}
else if (a.containsKey(s2[i]) && a.containsKey(s2[i+1])){
sum+=a.get(s2[i])*10;
}
}
System.out.println(sum);
}
}
利用以上程序便可以实现英文字母的加法了。