JAVA笔试题 15、编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 public class Intercept { public static String intercept(String str,int len) throws Exception { byte[] bytes = str.getBytes(); System.out.println(bytes.length); if(bytes.length<len) { throw new Exception("你的字符串没那么长"); } char[] chars = str.toCharArray(); StringBuffer sb = new StringBuffer(); for(int i = 0;i<len;) { if(String.valueOf(chars[i]).getBytes().length==1) { sb.append(chars[i]); i++; continue; } if(String.valueOf(chars[i]).getBytes().length==2) { if((i+2)<len) { sb.append(chars[i]); i++; len--; } else { break; } } } return sb.toString(); } public static void main(String[] args) { try { String str = Intercept.intercept("我ABC汉DEF", 6); System.out.println(str); } catch (Exception e) { e.printStackTrace(); } }} 有此问题我想到了另外一套题可用相似的方法来解决:问题描述: 将一个字符串中的中文子串提取出来,字符串的格式类似如下:"abc 我love你 123 我也爱你 al5 爱的就是你" 中间用空格隔开我的思路如下:package org.mypack2;import java.util.ArrayList;import java.util.List;public class Intercept { public static Object[] pickup(String str) { String[] strs = str.split(" "); List<String> pickupList = new ArrayList<String>(); for(String st : strs) { if((st.length()*2)==(st.getBytes().length)) { pickupList.add(st); } } return pickupList.toArray(); } public static void main(String[] args) { String str= "abc 我love你 123 我也爱你 al5 爱的就是你"; Object[] strs = Intercept.pickup(str); for(Object st : strs) { System.out.println(st.toString()); } }}各位有什么其它意见??? 对Unicode和字符集缺乏清晰的认识... class SplitString{ String SplitStr; int SplitByte; public SplitString(String str,int bytes) { SplitStr=str; SplitByte=bytes; System.out.println("The String is:'"+SplitStr+"';SplitBytes="+SplitByte); } public void SplitIt() { int loopCount; loopCount=(SplitStr.length()%SplitByte==0)?(SplitStr.length()/SplitByte):(SplitStr.length()/Split Byte+1); System.out.println("Will Split into "+loopCount); for (int i=1;i<=loopCount ;i++ ) { if (i==loopCount){ System.out.println(SplitStr.substring((i-1)*SplitByte,SplitStr.length())); } else {System.out.println(SplitStr.substring((i-1)*SplitByte,(i*SplitByte))); } } } public static void main(String[] args) { SplitString ss = new SplitString("test中dd文dsaf中男大3443n中国43中国人 0ewldfls=103",4); ss.SplitIt(); }} 汉字与字母都是Unicode 可以按字符来处理 就可以了啦! 搞得那么多干什么咯? /** * 按字节分割字串, 例如以每10个字节为一段 * @param resourceStr String 原字符串 * @param byteCntPerUnit int 每单位字节数 * @return ArrayList 返回切分后的list */ public static ArrayList splitStringByByte(String resourceStr, int byteCntPerUnit) { ArrayList list = new ArrayList(); String tmpStr = null; int strLength = resourceStr.length(); int currentIndex = 0; int lastEndIndex = 0; while (lastEndIndex < strLength - 1) { for (currentIndex = lastEndIndex; currentIndex < strLength; currentIndex++) { tmpStr = resourceStr.substring(lastEndIndex, currentIndex + 1); if (tmpStr.getBytes().length > byteCntPerUnit) { break; } } tmpStr = resourceStr.substring(lastEndIndex, currentIndex); list.add(tmpStr); lastEndIndex = currentIndex; } return list; }以上相似, 供参考! JAVA不是UNICODE吗?汉字占一个字符。 issgates一直很安静 写的真棒.cd_tiger的,我不太能理解...解释下,谢谢. 为什么这里 currentIndex + 1要加1tmpStr = resourceStr.substring(lastEndIndex, currentIndex + 1);tmpStr = resourceStr.substring(lastEndIndex, currentIndex);这里没有 我的jtable无法更新,应该是简单的问题,麻烦替我看下 给JPanel中的控件赋值 寻求大家的帮助Synchronized puzzle ~~ 急需:jdk下载的问题 关于线程的问题,请大家指教。 如何将JRadioButtonMenuItem添加到JMenuItem中? 七月七日。neverforget [请教] 用Jbuilde 编写EJB,编译的时候提示如下错误,但是程序仍然能够运行 各位老兄好,通过ObjectoutputStream ,ObjectINputStream 如何读写数据 关于小程序的权限问题 变量的简单问题,初学很菜 快捷键问题..
public class Intercept { public static String intercept(String str,int len) throws Exception {
byte[] bytes = str.getBytes();
System.out.println(bytes.length);
if(bytes.length<len) {
throw new Exception("你的字符串没那么长");
}
char[] chars = str.toCharArray();
StringBuffer sb = new StringBuffer();
for(int i = 0;i<len;) {
if(String.valueOf(chars[i]).getBytes().length==1) {
sb.append(chars[i]);
i++;
continue;
}
if(String.valueOf(chars[i]).getBytes().length==2) {
if((i+2)<len) {
sb.append(chars[i]);
i++;
len--;
}
else {
break;
}
}
}
return sb.toString();
}
public static void main(String[] args) {
try {
String str = Intercept.intercept("我ABC汉DEF", 6);
System.out.println(str);
} catch (Exception e) {
e.printStackTrace();
}
}}
问题描述:
将一个字符串中的中文子串提取出来,字符串的格式类似如下:
"abc 我love你 123 我也爱你 al5 爱的就是你" 中间用空格隔开
我的思路如下:package org.mypack2;import java.util.ArrayList;
import java.util.List;
public class Intercept { public static Object[] pickup(String str) {
String[] strs = str.split(" ");
List<String> pickupList = new ArrayList<String>();
for(String st : strs) {
if((st.length()*2)==(st.getBytes().length)) {
pickupList.add(st);
}
}
return pickupList.toArray();
}
public static void main(String[] args) {
String str= "abc 我love你 123 我也爱你 al5 爱的就是你";
Object[] strs = Intercept.pickup(str);
for(Object st : strs) {
System.out.println(st.toString());
}
}}各位有什么其它意见???
class SplitString{ String SplitStr; int SplitByte; public SplitString(String str,int bytes) { SplitStr=str; SplitByte=bytes; System.out.println("The String is:'"+SplitStr+"';SplitBytes="+SplitByte); } public void SplitIt() { int loopCount; loopCount=(SplitStr.length()%SplitByte==0)?(SplitStr.length()/SplitByte):(SplitStr.length()/Split Byte+1); System.out.println("Will Split into "+loopCount); for (int i=1;i<=loopCount ;i++ ) { if (i==loopCount){ System.out.println(SplitStr.substring((i-1)*SplitByte,SplitStr.length())); } else {System.out.println(SplitStr.substring((i-1)*SplitByte,(i*SplitByte))); } } } public static void main(String[] args) { SplitString ss = new SplitString("test中dd文dsaf中男大3443n中国43中国人 0ewldfls=103",4); ss.SplitIt(); }}
可以按字符来处理
就可以了啦!
搞得那么多干什么咯?
/**
* 按字节分割字串, 例如以每10个字节为一段
* @param resourceStr String 原字符串
* @param byteCntPerUnit int 每单位字节数
* @return ArrayList 返回切分后的list
*/
public static ArrayList splitStringByByte(String resourceStr, int byteCntPerUnit) {
ArrayList list = new ArrayList();
String tmpStr = null;
int strLength = resourceStr.length();
int currentIndex = 0;
int lastEndIndex = 0;
while (lastEndIndex < strLength - 1) {
for (currentIndex = lastEndIndex; currentIndex < strLength; currentIndex++) {
tmpStr = resourceStr.substring(lastEndIndex, currentIndex + 1);
if (tmpStr.getBytes().length > byteCntPerUnit) {
break;
}
}
tmpStr = resourceStr.substring(lastEndIndex, currentIndex);
list.add(tmpStr);
lastEndIndex = currentIndex;
}
return list;
}以上相似, 供参考!
汉字占一个字符。
为什么这里 currentIndex + 1要加1
tmpStr = resourceStr.substring(lastEndIndex, currentIndex + 1);tmpStr = resourceStr.substring(lastEndIndex, currentIndex);
这里没有