overflow npm binding tinymce Uploadify vue请求 管理后台模板 float占几个字节 java两个数组合并 mac脚本编辑器 idea中svn的使用 mac版的matlab好用吗 mysql插入 python中文手册 python中open python测试 python例子 python中import用法 javapackage java基础语言 java函数 java数组删除 java成员变量 java中new java实现栈 java流程 qq飞车剧情辅助 万能低格工具 轮播图js代码 零基础学python 通达信金融终端官网 脚本之家官网 qq免安装 abr文件 js跳出for循环 c4d挤压怎么用 pr加速视频 0x000008e linux格式化硬盘 grep正则表达式
当前位置: 首页 > 学习教程  > 编程语言

java字符操作及正则表达式

2021/1/28 23:58:26 文章标签:

Java正则表达式字符串操作 有诗云: 手持两把锟斤拷,口中疾呼烫烫烫。 脚踏千朵屯屯屯,笑看万物锘锘锘。 上回咱们说到java中String以及其常用方法,今天咱们聊一聊字符串相关的其他知识。 字符乱码 文件读取需要注意&#xf…

Java正则表达式+字符串操作

有诗云:

手持两把锟斤拷,口中疾呼烫烫烫。

脚踏千朵屯屯屯,笑看万物锘锘锘。

上回咱们说到java中String以及其常用方法,今天咱们聊一聊字符串相关的其他知识。

字符乱码

文件读取需要注意,在编码格式上要保持一致,否则会出现乱码现象。(按照什么格式写入的数据,就应该按照什么格式读取)

import java.io.*;
import java.nio.charset.Charset;
import java.util.Set;
import java.util.SortedMap;

public class CharsetTest {
    public static void main(String[] args) {

        writeFile1();
        readFile1();
    }

    public static void writeFile1()  {
        //output是从java程序写入到文件中去
        FileOutputStream fos = null;
        OutputStreamWriter osw = null;
        BufferedWriter bw = null;

        String charset = "UTF-8";

        try{
            fos = new FileOutputStream("C:/Users/Yokna/Desktop/test1.txt");
            osw = new OutputStreamWriter(fos,charset);
            bw = new BufferedWriter(osw);

            bw.write("hi");
            bw.newLine();
            bw.write("你好");
            bw.newLine();

        }catch(Exception e){
            e.printStackTrace();
        }finally {
            try {
                bw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public static void readFile1(){
        FileInputStream fis = null;
        InputStreamReader isr = null;
        BufferedReader br = null;

        try {
            fis = new FileInputStream("C:/Users/Yokna/Desktop/test1.txt");
            isr = new InputStreamReader(fis,"UTF-8");//此处如果修改为GBK编码 则会出现乱码
            br = new BufferedReader(isr);

            String line;
            while((line = br.readLine())!= null){
                System.out.println(line);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}

java的字符编码

源文件编码:采取UTF-8编码

程序内部采用UTF-16存储所有字符

和外界的输入输出尽量采用UTF-8编码

​ 不能使用一种编码写入,换另外一种编码读取

如何将中文字符转化成ASCII编码

1.cmd下进入到需要转化的文件目录

2.调用jdk中native2ascii命令

在这里插入图片描述

在这里插入图片描述

C:\Users\Yokna>cd desktop

C:\Users\Yokna\Desktop>native2ascii test.txt test_zh_CN.txt

C:\Users\Yokna\Desktop>

java中正则表达式的使用

java借助Pattern类与Matcher类使用正则表达式

Pattern类

作用:构造一个正则表达式对象

使用:通常与Match匹配使用,主要是为matcher传递正则表达式

package regex;

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class MatcherDemo {
	//构造正则表达式
	private static final String REGEX = "\\bdog\\b";  //\b表示边界
	//待匹配的字符
	private static final String INPUT = "dog dog dog doggie dogg";

	//检查字符串里面有多少个dog
	public static void main(String[] args) {

		//由于Pattern的构造函数是私有的,不可以直接创建,所以通过静态方法compile(String regex)方法来创建,将给定的正则表达式编译并赋予给Pattern类
		Pattern p = Pattern.compile(REGEX);
		//Pattern.matcher(CharSequence input) 对指定输入的字符串创建一个Matcher对象
		Matcher m = p.matcher(INPUT);
		int count = 0;
		while (m.find()) {
			count++;
			System.out.println("Match number " + count);
			System.out.println("start(): " + m.start());
			System.out.println("end(): " + m.end());
		}
	}
}

Matcher类

作用:按照正则表达式的规则匹配字符串

用法:见代码及注解

matcher.lookingAt与matcher.matches方法

//两种查询用法及区别
public class MatchesLooking {

    private static final String REGEX = "foo";
    private static final String INPUT =
        "foo00000";
    private static Pattern pattern;
    private static Matcher matcher;

    public static void main(String[] args) {
   
        // Initialize
        pattern = Pattern.compile(REGEX);
        matcher = pattern.matcher(INPUT);

        System.out.println("Current REGEX is: "
                           + REGEX);
        System.out.println("Current INPUT is: "
                           + INPUT);

        //此处是为了区分matcher.lookingAt与matcher.matches的区别
        //matcher.lookingAt是模糊查询,部分匹配就会返回True
        //matcher.matches是完全匹配,类似与精准查询
        System.out.println("lookingAt(): "
            + matcher.lookingAt());  //部分匹配
        System.out.println("matches(): "
            + matcher.matches());    //完全匹配
    }
}

find、appendReplacement、appendTail方法

//查找并替换
public class RegexDemo {
 
    private static String REGEX = "a*b"; //*表示限定前面的a可以有0或者多个。
    private static String INPUT = "aabfooaabfooabfoobcdd";
    private static String REPLACE = "-";
 
    public static void main(String[] args) {
        Pattern p = Pattern.compile(REGEX);
        Matcher m = p.matcher(INPUT); // get a matcher object
        //StringBuffer是可变类型的字符对象,且线程安全,append方法添加字符串较快
        StringBuffer sb = new StringBuffer();
        //全部替换
        while(m.find()){
            //find()尝试查找与该模式匹配的输入序列的下一个子序列。成功则返回true  
            m.appendReplacement(sb,REPLACE);
            //appendReplacement方法会把匹配到的内容替换为REPLACE,并且把从上次替换的位置到这次替换位置之间的字符串也拿到,然后,加上这次替换后的结果一起追加到StringBuffer里(假如这次替换是第一次替换,那就是只追加替换后的字符串啦)
        }
        //appendTail方法把最后一次匹配到内容之后的字符串追加到StringBuffer中
        m.appendTail(sb); 
        System.out.println(sb.toString());
    }
}

replaceAll方法

public class ReplaceDemo {
 
    private static String REGEX = "dog";
    private static String INPUT =
        "The dog says meow. All dogs say meow.";
    private static String REPLACE = "cat";
 
    public static void main(String[] args) {
        Pattern p = Pattern.compile(REGEX);
        // get a matcher object
        Matcher m = p.matcher(INPUT);
        INPUT = m.replaceAll(REPLACE);  //把所有的dog都换成cat
        System.out.println(INPUT);
    }
}

字符串的拆分

//以“,”为分割 拆分字符串
String a = "123,321,,   abc";
String[] as = a.split(",");

//调用第三方包com.google.common.base下的Splitter拆分字符串
//拆分字符串,忽略空字符串
 Iterable<String> split = Splitter.on(',')//以“,”为拆分标准拆分字符串
                .trimResults()//忽略掉空格
                .omitEmptyStrings()//忽略掉空字符串
                .split("123,321,,   abc");
//实现Iterable接口,可以使用foreach循环
for (String s : split) {
            System.out.println(s);
        }

字符串与list相互转换

list转字符串

public static void main(String[] args) {
    	//构造字符串列表
    	List<String> names = new LinkedList<String>();
        names.add("Xiaohong");
        names.add("Xiaoming");
        names.add("Daming");
        names.add("Xiaohei");
        
        //合并为一个字符串,以逗号相连
    	//下面的join方法,会将names列表中的元素加在一起形成一个字符串,元素之间以“,”隔开
        String nameStr = String.join(",",names);
        
    }

字符串转list

public static void main(String[] args) {
		List<String> names = new LinkedList<String>();
        names.add("Xiaohong");
        names.add("Xiaoming");
        names.add("Daming");
        names.add("Xiaohei");
        
        //从ArrayList变到字符串
        String str1 = String.join(",", names);  //String.join, JDK 8 引入
        System.out.println(str1);
       
        String str2 = StringUtils.join(names, ",");  //Apache Commons Lang
        System.out.println(str2);
        
        //从字符串变回ArrayList
        List<String> names2 = Arrays.asList(str2.split(",")); 
        for(String name:names2)
        {
        	System.out.println(name);
        }
        
        //StringUtils 可以支持更多数据类型
        List<Integer> ids = new ArrayList<Integer>();
        ids.add(1);
        ids.add(3);
        ids.add(5);
        String str3 = StringUtils.join(ids, ",");  
        System.out.println(str3);
	}

本文链接: http://www.dtmao.cc/news_show_650344.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?