当前位置:编程学习 > JAVA >>

如何修改string中的单词?

假如有字符串:
String source="By Matt Spetalnick and Andrea Shalal-Esa. WASHINGTON | Fri Aug 23, 2013 11:27 EDT. WASHINGTON (Reuters) - The United States on Friday was repositioning naval forces in the Mediterranean to give President Barack Obama the option for an armed .he looked down,He saw his own shadow reflected in the water beneath."
问题:把source从第N句第M个单词开始,每隔K个单词去掉其字符数的1/2.
如:从第二句第一个单词开始,每隔2个单词的去掉其1/2。上面变成:WASHI | Fri Aug 23, 2013 11:27 ED .WASHINGTON (Reuters) - TH United States O..........

求:实现的思路或者代码? string 单词 算法 java --------------------编程问答-------------------- 个人思路。。没实践过。。
先用.分割字符串得到一字符串数组
再对遍历数组中的数据用空格分割
继续遍历新的数组,用正则判断是否为单词,用一变量控制步长,对数据截子串
--------------------编程问答-------------------- @fudongrifdr感觉好麻烦啊,好多判断。分割还要考虑到数字,逗号,句号之类的 --------------------编程问答-------------------- 看看别人有什么好得思路没 --------------------编程问答--------------------
不知道这样做有什么意义 --------------------编程问答-------------------- 这样变态的想法也有,绝!同意以上楼主,数组分割易于理解。 --------------------编程问答-------------------- 各位我也觉得好变态,无意义,但是有人要求这么做。大家就多说点吧~上面说的按空格分隔后如何还原标点符号,数字呢? --------------------编程问答-------------------- 好蛋疼,都没舍得花脑细胞把问题看明白。。。 --------------------编程问答-------------------- 这是竞赛题吗? --------------------编程问答-------------------- 顶。。。。。。。。。。。。。。。。。。 --------------------编程问答-------------------- 什么叫没隔几个单词去掉1/2,谁的1/2,你说的隔两个单词不符合你的示例,看不明白。 --------------------编程问答-------------------- String 其实就是 char[].按数据的思路去操作你的这个问题,应该不是很难了吧! --------------------编程问答-------------------- 花了点时间写了一下,不过还是存在一下的一些问题
/**
 * 存在的问题:
 * 1,无法区分问号,感叹号等句子
 * 2,类似于 "this this's 都统统死掉(指截取的时候会把逗号截取,会把这些符号当做一个字母)
 * 3,从第几个单词开始,每隔第几个单词抠词,是针对每一句的,而非全文 
 * 4,每隔gap单词抠词,但是如果刚好遇到数字,单个字母,虽然能跳过,但是,这是跳过了2倍gap开始扣词
 */
public Map<Integer, String> resolveQuestion(String content, GameRule rule){
StringBuffer resultContent = new StringBuffer();
Map<Integer, String> qMaps = new HashMap<Integer, String>();
// 只能按句号截取,如果按问号,感叹号的话,最后就不能append
String[] sentences = content.split("\\.");
int whichSentence =rule.getWhichsentence();
int whichword=rule.getWhichword();
int i = 0;
int gap=2;
int sort = 1; // 试题序号
for (String sentece : sentences) {
if (whichSentence-1 <= i) { // 第一句不处理
String[] words = sentece.trim().split("\\ ");
int j = 1;
for (String word : words) {
// if (1 != j && j % 2 == 0 && word.length() > 1
if ( (j-whichword)%(gap+1)==0&& word.length() > 1
&& sort <= rule.getWordcount()) { // 从第whichword个单词开始,并且单词长度大于1,并且生成的小题数量小于等于规定的小题数
if (word.indexOf(",") != -1) {
word = word.substring(0, word.length() - 1);
}
int len = word.length() % 2 == 0 ? word.length() / 2
: word.length() / 2 + 1;
String disWord = word.substring((word.length() - len));
String viewWord = word.replace(disWord, "____");
if (word.lastIndexOf(",") != -1) {
resultContent.append(viewWord).append(", ");
} else {
resultContent.append(viewWord).append(" ");
}
qMaps.put(sort, word);
sort++;
} else {
resultContent.append(word).append(" ");
}
j++;
}
resultContent.append(". ");// 句子结束
}else{
resultContent.append(sentece).append(". ");
}
i++;
}
System.out.println(resultContent.toString());
qMaps.put(0, resultContent.toString()); // 将显示试题添加到MAP
// System.out.println(qMaps.get(0));
return qMaps;
}
--------------------编程问答--------------------
引用 2 楼 cszdm 的回复:
@fudongrifdr感觉好麻烦啊,好多判断。分割还要考虑到数字,逗号,句号之类的

可以对待操作字符串进行预处理,去掉无需判断的那些字符,然后就能更轻易捕捉到第几个单词了
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,