对 “中华|人民|共和|国”这样的字符串进行切割,切割后写入以新的文件中。
1、用FileOutputStream 把字符串写入文件中;
2、用FileInputStream(或者BufferedReader)对文件进行读取,缓冲区大小设为文件大小;并且转换成16进制;
3、对16进制下的文件进行切割。
4、切割后把16进制转换成字符串,并写入到新的文件中。

JAVA中涉及I/O流操作,就必须了解计算机编码:
1、ASCII:
在计算机中数据的存储和运算都是使用进制,而这些二进制具体表示成哪个符号,这就形成了编码。如果编码方式特别多,在通信中就会造成很多混乱。这就形成了美国信息交换标准代码(ASCII),在于早期的西方国家,对于日常中使用的字符就是英文字母+符号。也就是2的7次方就可以完全表示使用的字符。ASCII中能表示128(0-127)个字符,比如说在大写A是65,二进制是01000001。

2、ISO-8859-1
128个字符,仍然没有办法完全表示欧洲国家所需要字符,于是在ascii的基础上利用高位又进行了扩充,使用能够表示256个字符(0-255),这基本上满足了欧洲国家的需求。

3、Unicode
但是对于其他国家来说,比如中国的汉字可能在10万以上,ascii根本无法满足这样的需求。于是Unicode就出现了。Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

4、Unicode和utf-8,utf-16;
unicode是一种编码方式,和ascii是同一个概念,而UTF是一种存储方式(格式)。unicode相当于一个符号集,它规定的每种语言对应的二进制,编码,但没有规定这个二进制如何存储。比如说汉字,占两个字节,但在编码中靠后的有可能三个字节,甚至四个字节,这样就产生了unicode编码的多种存储方式。

5、UTF-8
utf-8它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。


6、GBK
GBK的文字编码是双字节来表示的,即不论中、英文字符均使用双字节来表示,只不过为区分中文,将其最高位都定成1。
至于UTF-8编码则是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24位(三个字节)来编码。对于英文字符较多的论坛则用UTF-8节省空间。
GBK包含全部中文字符,
UTF-8则包含全世界所有国家需要用到的字符。
GBK是在国家标准GB2312基础上扩容后兼容GB2312的标准
UTF-8编码的文字可以在各国各种支持UTF8字符集的浏览器上显示。
比如,如果是UTF8编码,则在外国人的英文IE上也能显示中文,而无需他们下载IE的中文语言支持包。

对于英文比较多的论坛,使用GBK则每个字符占用2个字节,而使用UTF-8英文却只占一个字节。
UTF-8版本虽然具有良好的国际兼容性,但需要比GBK/BIG5版本多占用50%的数据库存储空间,因此并非推荐使用,仅供对国际兼容性有特殊要求的用户使用。

7、UTF-16
UTF-16好处在于大部分字符都以固定长度的字节 (2字节) 储存,但UTF-16却无法兼容于ASCII编码。最后在java中使用UTF-16表示内部文本

代码,在eclipse中写入文件

public class RegexWrite {
    /** * @param yu */
    public final static String FILE_NAME = "file.txt";
    public final static String FILE_NAME_REGEX="file_regex.txt";

    public static void main(String[] args) {
        // 写文件:"中华|人民|共和|国"
        try {
            //创建文件输入流,写文件;
            FileOutputStream fos = new FileOutputStream(FILE_NAME);
            fos.write("中华|人民|共和|国".getBytes());
            fos.close();
        } catch (IOException e) {
            // Todo Auto-generated catch block
            e.printstacktrace();
        }
    }

}

2、读取文件,并转换成16进制切割,再写切割后写入到新的文件中。

public class RegexRead {
    public static void main(String[] args) {
        String context = "";
        String str_split = "|";
        try {
            // 1创建缓冲文件输出流,读文件;在java中默认的创建缓存区的大小为8192个字节;
            /*BufferedReader br = new BufferedReader(new FileReader( RegexWrite.FILE_NAME)); int read = 0; while ((read = br.read()) != -1) { context = context + (char) read; } br.close();*/
            //2、设置缓冲区文件大小为要读写文件大小;
            int read;
            FileInputStream fis =new FileInputStream(RegexWrite.FILE_NAME);
            //得到文件的字节个数;
            int available=fis.available();
            //把文件大小赋值给byte数组;
            byte b[] =new byte[available];
            System.out.println("available"+available);
            while((read=fis.read(b))>0){
                System.out.println(new String(b,0,read));
                context=context+new String(b,read);
            }
            fis.close();

        } catch (Exception e) {
            // Todo Auto-generated catch block
            e.printstacktrace();
        }
        System.out.println("读取所要切割的字符串 " + context);
        // 把字符串用十六进制表示;
        String str_hex = str2HexStr(context);
        // 把切割的字符串转换成十六进制;
        String split_hex = str2HexStr(str_split);

        System.out.println("内容的十六进制表示: " + str_hex);
        System.out.println("| 的十六进制表示: " + split_hex);
        // 对字符串切割,返回数组;
        String[] splie_context = str_hex.split(split_hex);
        String str_final = "";
        for (int i = 0; i < splie_context.length; i++) {
            String convert_str = "";
            convert_str = hexStr2Str(splie_context[i]);
            // convert_str = hexString2String(splie_context[i]);
            System.out
                    .println(splie_context[i] + " 转换后 " + convert_str);
            str_final = str_final + convert_str;
        }
        System.out.println("str_final " + str_final);
        // 把得到的字符串写入到新的文件中;
        try {

            BufferedWriter bw = new BufferedWriter(new FileWriter(
                    RegexWrite.FILE_NAME_REGEX));
            bw.write(str_final);
            bw.flush();
            bw.close();
        } catch (IOException e) {
            // Todo Auto-generated catch block
            e.printstacktrace();
        }

    }

    /** * 字符串转换成16进制; * * @param str * @return */
    public static String str2HexStr(String str) {
        char[] chars = "0123456789ABCDEF".tochararray();
        StringBuilder sb = new StringBuilder("");
        byte[] bs = str.getBytes();
        int bit;
        for (int i = 0; i < bs.length; i++) {
            bit = (bs[i] & 0x0f0) >> 4;
            sb.append(chars[bit]);
            bit = bs[i] & 0x0f;
            sb.append(chars[bit]);
        }
        return sb.toString();
    }

    /** * 十六进制转换字符串 */

    public static String hexStr2Str(String hexStr) {
        String str = "0123456789ABCDEF";
        char[] hexs = hexStr.tochararray();
        byte[] bytes = new byte[hexStr.length() / 2];
        int n;
        for (int i = 0; i < bytes.length; i++) {
            n = str.indexOf(hexs[2 * i]) * 16;
            n += str.indexOf(hexs[2 * i + 1]);
            bytes[i] = (byte) (n & 0xff);
        }
        return new String(bytes);
    }

}

切割后

运行打印

工作笔记:正则切割字符串的更多相关文章

  1. Html5 canvas实现粒子时钟的示例代码

    这篇文章主要介绍了Html5 canvas实现粒子时钟的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. ios – UIColor到十六进制(网页颜色)

    有没有简单的方法将UIColor转换为十六进制值?

  3. ios – 我可以使用AVCaptureSession将AAC流编码到内存吗?

    解决方法我最后向Apple寻求建议.似乎AVCaptureSession抓住了AAC硬件编码器,但只允许您使用它直接写入文件.您可以使用软件编码器,但您必须专门询问它而不是使用AudioConverterNew:同当然,软件编码器会占用cpu资源,但会完成工作.

  4. 在Xcode4中,你可以更改用于显示隐形字符的字符吗?

    我更喜欢VisualStudio显示隐形的方式……

  5. ios – NSLocalizedString有时会加载字符串,而不是总是

    解决方法如果您的localisable文件中有任何额外的分号,它会构建但无法进行本地化.

  6. ios – 应用程序商店描述特殊字符

    是不是可以在AppStore描述中使用像星星这样的特殊字符了?我得到这个错误:描述不得包含标记语言.说明不得包含以下字符:★提前致谢:)解决方法仍然允许一些unicode字符.以下字符已经过测试并仍然有效:◆√至于现在他们工作正常,但苹果可以随时再次改变条件.

  7. ios – 将数组中的字符转换为整数

    即使我搜索了文档,我似乎无法弄清楚如何做到这一点.我试图弄清楚如何将数组中索引处的字符转换为整数.例如,假设我有一个名为“容器”的字符数组,我无法弄清楚该怎么做:谢谢您的帮助!解决方法Swift并不容易在原始和类型表示之间进行转换.这是一个在此期间应该有所帮助的扩展:这使您可以非常接近您想要的:对于遇到此问题的任何工程师,请参阅rdar://17494834

  8. ios – NSString cString已被弃用.什么是替代品?

    我有另一个新手问题.我写了一段代码,将Nsstring转换为NSMutableData,以模拟一个webService结果.但事实证明,cString已被弃用.你可以帮我更换吗?这是我的代码解决方法>从字符串获取原始字节.>获取UTF8编码中这些字节的长度.>使用dataWithBytes:length:方法创建NSData对象.

  9. ios – 创建一个包含n个空格或其他重复字符的字符串

    我想使用Swift使用n个空格进行字符串,但不使用for循环或手动如下所示:解决方法String已经有一个repeating:count:initializer就像Array(和其他采用RangeReplaceableIndexable协议的集合):所以你可以打电话:请注意,重复的参数是一个字符串,而不仅仅是一个字符,因此您可以重复整个序列:编辑:更改为Swift3语法,并删除了关于Swift1类

  10. ios – 如何使用Unicode十六进制值(UTF-16)在Swift中表达字符串

    我想在Swift中使用十六进制值编写一个Unicode字符串.我已经阅读了字符串和字符的documentation,所以我知道我可以使用特殊的Unicode字符直接在字符串如下:版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

随机推荐

  1. 法国电话号码的正则表达式

    我正在尝试实施一个正则表达式,允许我检查一个号码是否是一个有效的法国电话号码.一定是这样的:要么:这是我实施的但是错了……

  2. 正则表达式 – perl分裂奇怪的行为

    PSperl是5.18.0问题是量词*允许零空间,你必须使用,这意味着1或更多.请注意,F和O之间的空间正好为零.

  3. 正则表达式 – 正则表达式大于和小于

    我想匹配以下任何一个字符:或=或=.这个似乎不起作用:[/]试试这个:它匹配可选地后跟=,或者只是=自身.

  4. 如何使用正则表达式用空格替换字符之间的短划线

    我想用正则表达式替换出现在带空格的字母之间的短划线.例如,用abcd替换ab-cd以下匹配字符–字符序列,但也替换字符[即ab-cd导致d,而不是abcd,因为我希望]我如何适应以上只能取代–部分?

  5. 正则表达式 – /bb | [^ b] {2} /它是如何工作的?

    有人可以解释一下吗?我在t-shirt上看到了这个:它似乎在说:“成为或不成为”怎么样?我好像没找到’e’?

  6. 正则表达式 – 在Scala中验证电子邮件一行

    在我的代码中添加简单的电子邮件验证,我创建了以下函数:这将传递像bob@testmymail.com这样的电子邮件和bobtestmymail.com之类的失败邮件,但是带有空格字符的邮件会漏掉,就像bob@testmymail也会返回true.我可能在这里很傻……当我测试你的正则表达式并且它正在捕捉简单的电子邮件时,我检查了你的代码并看到你正在使用findFirstIn.我相信这是你的问题.findFirstIn将跳转所有空格,直到它匹配字符串中任何位置的某个序列.我相信在你的情况下,最好使用unapp

  7. 正则表达式对小字符串的暴力

    在测试小字符串时,使用正则表达式会带来性能上的好处,还是会强制它们更快?不会通过检查给定字符串的字符是否在指定范围内比使用正则表达式更快来强制它们吗?

  8. 正则表达式 – 为什么`stoutest`不是有效的正则表达式?

    isthedelimiter,thenthematch-only-onceruleof?PATTERN?

  9. 正则表达式 – 替换..与.在R

    我怎样才能替换..我尝试过类似的东西:但它并不像我希望的那样有效.尝试添加fixed=T.

  10. 正则表达式 – 如何在字符串中的特定位置添加字符?

    我正在使用记事本,并希望使用正则表达式替换在字符串中的特定位置插入一个字符.例如,在每行的第6位插入一个逗号是什么意思?如果要在第六个字符后添加字符,请使用搜索和更换从技术上讲,这将用MatchGroup1替换每行的前6个字符,后跟逗号.

返回
顶部