java中文和英文分开,比较急啊.

dxhdxh2k 2010-01-04 01:48:05
我的数据如下:

AGS(American Geographical Society)美国地理学会
AGS(Appalachian Geological Society)阿巴拉契亚地质学会(美国)
Ahnfeltia(红藻类)伊谷草属(Q)
American Institute of Chemical Engineers美国化学工程师学会

想把其中英文和中文区别开来. 形成如下形式:(中间以tab分开)

AGS(American Geographical Society) 美国地理学会
AGS(Appalachian Geological Society) 阿巴拉契亚地质学会(美国)
Ahnfeltia (红藻类)伊谷草属(Q)
American Institute of Chemical Engineers 美国化学工程师学会

其中的左括号和右括号很不好处理. 哪位给帮帮忙啊. 注意中文和英文相连接处的括号.
...全文
503 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
baishengjie 2010-01-04
  • 打赏
  • 举报
回复
学习
crazylaa 2010-01-04
  • 打赏
  • 举报
回复
java:

import java.util.ArrayList;

public class TT {
public static void main(String[] args) {
ArrayList<String> lst = new ArrayList<String>();
lst.add("AGS(American Geographical Society)美国地理学会 ");
lst.add("AGS(Appalachian Geological Society)阿巴拉契亚地质学会(美国) ");
lst.add("Ahnfeltia(红藻类)伊谷草属(Q) ");
lst.add("Ahnfeltia(1)红藻类伊谷草属(Q) ");
lst.add("American Institute of Chemical Engineers美国化学工程师学会 ");

for (int k = 0; k < lst.size(); k++) {
StringBuffer sb = new StringBuffer();
String s1 = lst.get(k);
for (int i = 0; i < s1.length(); i++) {
char c = s1.charAt(i);
Character.UnicodeBlock cUB = Character.UnicodeBlock.of(c);
if (cUB != Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS) {
sb.append(c);
} else {
if (sb.substring(i - 1).equals("(")) {
sb.setCharAt(i - 1, '\t');
sb.append("(" + s1.substring(i));
} else if (sb.substring(i - 1).equals(")")) {
int idx = sb.indexOf("(");
if (idx >= 0) {
try {
Integer.parseInt(sb.substring(idx + 1, i - 1));
sb.setCharAt(idx, '\t');
StringBuffer sb1 = new StringBuffer();
sb1.append(sb.substring(0, idx));
sb1.append("\t" + s1.substring(idx));
sb = sb1;
} catch (NumberFormatException e) {
sb.append("\t" + s1.substring(i));
}
}
} else {
sb.append("\t" + s1.substring(i));
}
break;
}
}
System.out.println(sb.toString());
}
}
}


结果:

IWAV0055I Java Bean test.TT started with the main method
AGS(American Geographical Society) 美国地理学会
AGS(Appalachian Geological Society) 阿巴拉契亚地质学会(美国)
Ahnfeltia (红藻类)伊谷草属(Q)
Ahnfeltia (1)红藻类伊谷草属(Q)
American Institute of Chemical Engineers 美国化学工程师学会
crazylaa 2010-01-04
  • 打赏
  • 举报
回复
import java.util.ArrayList;

public class TT {
public static void main(String[] args) {
ArrayList<String> lst = new ArrayList<String>();
lst.add("AGS(American Geographical Society)美国地理学会 ");
lst.add("AGS(Appalachian Geological Society)阿巴拉契亚地质学会(美国) ");
lst.add("Ahnfeltia(红藻类)伊谷草属(Q) ");
lst.add("Ahnfeltia(1)红藻类伊谷草属(Q) ");
lst.add("American Institute of Chemical Engineers美国化学工程师学会 ");

for (int k = 0; k < lst.size(); k++) {
StringBuffer sb = new StringBuffer();
String s1 = lst.get(k);
for (int i = 0; i < s1.length(); i++) {
char c = s1.charAt(i);
Character.UnicodeBlock cUB = Character.UnicodeBlock.of(c);
if (cUB != Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS) {
sb.append(c);
} else {
if (sb.substring(i - 1).equals("(")) {
sb.setCharAt(i - 1, '\t');
sb.append("(" + s1.substring(i));
} else if (sb.substring(i - 1).equals(")")) {
int idx = sb.indexOf("(");
if (idx >= 0) {
try {
Integer.parseInt(sb.substring(idx + 1, i - 1));
sb.setCharAt(idx, '\t');
StringBuffer sb1 = new StringBuffer();
sb1.append(sb.substring(0, idx));
sb1.append("\t" + s1.substring(idx));
sb = sb1;
} catch (NumberFormatException e) {
sb.append("\t" + s1.substring(i));
}
}
} else {
sb.append("\t" + s1.substring(i));
}
break;
}
}
System.out.println(sb.toString());
}
}
}
applerockhool 2010-01-04
  • 打赏
  • 举报
回复
正则
dxhdxh2k 2010-01-04
  • 打赏
  • 举报
回复
呵呵,如果是读文件时,文件必须是utf-8编码!
dxhdxh2k 2010-01-04
  • 打赏
  • 举报
回复
aid(1)助航标志(2)工具;设备;器具,这一句修改后应该为:aid (1)助航标志(2)工具;设备;器具
上述代码没有实现啊!
SambaGao 2010-01-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 crazylaa 的回复:]
Java codeimport java.util.ArrayList;publicclass TT {publicstaticvoid main(String[] args) {
ArrayList<String> lst=new ArrayList<String>();
lst.add("AGS(American Geographical Society)美国地理学会");
lst.add("AGS(Appalachian Geological Society)阿巴拉契亚地质学会(美国)");
lst.add("Ahnfeltia(红藻类)伊谷草属(Q)");
lst.add("American Institute of Chemical Engineers美国化学工程师学会");for (int k=0; k< lst.size(); k++) {
StringBuffer sb=new StringBuffer();
String s1= lst.get(k);for (int i=0; i< s1.length(); i++) {char c= s1.charAt(i);
Character.UnicodeBlock cUB= Character.UnicodeBlock.of(c);if (cUB!= Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS) {
sb.append(c);
}else {if (sb.substring(i-1).equals("(")) {
sb.setCharAt(i-1,'\t');
sb.append("("+s1.substring(i));
}else{
sb.append("\t"+ s1.substring(i));
}break;
}
}
System.out.println(sb.toString());
}
}
}
结果:这里的\t被转化了,实际控制台是有的
Java code
IWAV0055I Java Bean test.TT started with the main method
AGS(American Geographical Society) 美国地理学会
AGS(Appalachian Geological Society) 阿巴拉契亚地质学会(美国)
Ahnfeltia (红藻类)伊谷草属(Q)
American Institute of Chemical Engineers 美国化学工程师学会
[/Quote]

py330316117 2010-01-04
  • 打赏
  • 举报
回复
学习了,顶#6。
if (cUB != Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS)
利用了Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS 表示中日韩文。这个还真不知道
  • 打赏
  • 举报
回复
是啊

好歹得截个空格之类的
借我那把枪吧 2010-01-04
  • 打赏
  • 举报
回复
都是高手高手高高手
psyuhen 2010-01-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 crazylaa 的回复:]
if (cUB != Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS)
利用了Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS 表示中日韩文。
[/Quote]

还真没有用过这个东西呢。。。
学习学习。。。
bobo415 2010-01-04
  • 打赏
  • 举报
回复
用程序区分最后一个英文字母就可以了
跟一楼样
crazylaa 2010-01-04
  • 打赏
  • 举报
回复
另外,上面代码对中文的()没做处理。楼主可以先s1=lst.get(k).replaceAll("(","(").replaceAll(")",")")替换一下。
crazylaa 2010-01-04
  • 打赏
  • 举报
回复
if (cUB != Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS)
利用了Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS 表示中日韩文。
crazylaa 2010-01-04
  • 打赏
  • 举报
回复
import java.util.ArrayList;

public class TT {
public static void main(String[] args) {
ArrayList<String> lst = new ArrayList<String>();
lst.add("AGS(American Geographical Society)美国地理学会 ");
lst.add("AGS(Appalachian Geological Society)阿巴拉契亚地质学会(美国) ");
lst.add("Ahnfeltia(红藻类)伊谷草属(Q) ");
lst.add("American Institute of Chemical Engineers美国化学工程师学会 ");

for (int k = 0; k < lst.size(); k++) {
StringBuffer sb = new StringBuffer();
String s1 = lst.get(k);
for (int i = 0; i < s1.length(); i++) {
char c = s1.charAt(i);
Character.UnicodeBlock cUB = Character.UnicodeBlock.of(c);
if (cUB != Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS) {
sb.append(c);
} else {
if (sb.substring(i - 1).equals("(")) {
sb.setCharAt(i-1, '\t');
sb.append("("+s1.substring(i));
}else{
sb.append("\t" + s1.substring(i));
}
break;
}
}
System.out.println(sb.toString());
}
}
}

结果:这里的\t被转化了,实际控制台是有的

IWAV0055I Java Bean test.TT started with the main method
AGS(American Geographical Society) 美国地理学会
AGS(Appalachian Geological Society) 阿巴拉契亚地质学会(美国)
Ahnfeltia (红藻类)伊谷草属(Q)
American Institute of Chemical Engineers 美国化学工程师学会
dxhdxh2k 2010-01-04
  • 打赏
  • 举报
回复
给段代码啊.
poFate 2010-01-04
  • 打赏
  • 举报
回复
寻找出现的第一个中文字符 如果其前面是( 则将 (和以后的字符串一起分割出来 ,如果不是就将从这个中文字符开始的字符串分割出来
dong502 2010-01-04
  • 打赏
  • 举报
回复
‘(’或‘)’ 后面不是英文的 就在‘(’或‘)’前面+tab
xiaohuanjie 2010-01-04
  • 打赏
  • 举报
回复
没看懂


帮顶
dong502 2010-01-04
  • 打赏
  • 举报
回复
给你一个思路
用ASCII区分
(后面是英文字母的 存入集合1
否则
(指的是中文) 存入集合2

62,633

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧