日期:2014-05-20  浏览次数:20744 次

有关字符串中汉字提取的问题
import javax.swing.JOptionPane;


public class PrintTheWord {

public static void main(String[] args) {
String s1 = JOptionPane.showInputDialog("Please enter string:");
String s2 = JOptionPane.showInputDialog("Please input the num:");
String[] ss = s1.split("");
int num = Integer.parseInt(s2);
for(int i = 1;i < ss.length;i += num){

for(int j = i;j < (i + num);j ++){
if(ss[j].matches("[\u4e00-\u9fa5]") && (j == (i + num - 1)) &&
 (j != i)){
System.out.print("\n" + ss[j]);
} else{
System.out.print(ss[j] + "\t");
}
}
System.out.println("");
}
}

}


编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF"6,应该输出"我ABC",而不是"我ABC+汉的半个"。

这道题应该有大虾很早前就做过了。按照我的思路我写了,去的num值为3,如果没有两或多个相连的汉字输出时没什么问题的。但是当有三个汉字时,有两个汉字就必然会连在一起。
求指教,谢谢!
string 汉字提取

------解决方案--------------------
引用:
……
只是当我用 "" (应该是叫做空吧?)去划分出String[]时,多出了一个长度,是字符串最前面有这么个符号吗?……
 

一般不用""空字符串来作 split 函数的第一个参数。因为用 "" 来分隔某个字符串,在直观逻辑上是很不容易解释的。
如果非这么用,结果则是在最前面有这么个"".
比如
"abc".split("")的结果是{"","a","b","c"}
第一个总是 "".
很不容易解释,这样记住就好。
以后自己慢慢琢磨 API 文件中对split 函数的叙述。

我读的是英文的 API 文件,还真不会简单地拿中文来解释。

------解决方案--------------------
引用:
谈谈我的理解,如果不是楼主的意思见谅.
1 java内部处理字符统一使用unicode编码方式,所有字符都占2个字节。不会出现半个汉字的情况。
2 我猜测楼主是针对GBK编码来说的,因为GBK编码,ascii字符占一个字节,汉字占2个字节,比如字符串
  "我ABC汉DEF"就占8个字节。如果把这8个字节截取6个,就会把"汉"这个汉字的两个字节拆开。为了不
  拆……

 这个代码是有错误的.
下面根据<java 范例大全>的例子,把所有的都输出来,未经大量测试,楼主如发现有问题告诉我一下.


import javax.swing.JOptionPane;
import java.util.Arrays;    
import java.util.List;
import java.util.ArrayList;

public class PrintTheWordRotate{
    public static void main(String[] args) throws Exception{
        String s1 = JOptionPane.showInputDialog("Please enter string:");
        String s2 = JOptionPane.showInputDialog("Please input the num:");
        int num = Integer.parseInt(s2);
        System.out.println("输入的字符串是: "+s1+" 分割的长度是 "+num);
        List<String> list = getTotal(s1,num);                        //得到划分的字符串集合。
        System.out.println(list);
    }

    //得到分割的子串放容器返回
    //
    public static List<String> getTotal(String s, int copyNum) {
        List<String> list = new ArrayList<String>();