我正在尝试提取用户在我的应用中说出的句子中每个单词的首字母。目前,如果用户说" Hello World 2015"它将其插入文本字段。如果用户说" Hello World 2015"我希望将此分开。只有" HW2015"被插入文本字段。
final ArrayList<String> matches = data.getStringArrayListExtra(
RecognizerIntent.EXTRA_RESULTS);
matches变量将用户输入存储在数组中。我已经研究过使用split但不确定它是如何工作的。
我将如何实现这一目标?
谢谢
答案 0 :(得分:2)
将此正则表达式和您的列表传递给applyRegexToList
它的内容如下: (获得第一个字符)或(任何连续数字)或(空格后的任何字符)(^.{0,1})|(\\d+)|((?<=\\s)[a-zA-z])
()
public static ArrayList<String> applyRegexToList(ArrayList<String> yourList, String regex){
ArrayList<String> matches = new ArrayList<String>();
// Create a Pattern object
Pattern r = Pattern.compile(regex);
for (String sentence:yourList) {
// Now create matcher object.
Matcher m = r.matcher(sentence);
String temp = "";
//while patterns are still being found, concat
while(m.find())
{
temp += m.group(0);
}
matches.add(temp);
}
return matches;
}
答案 1 :(得分:1)
您可以通过执行以下操作将字符串拆分为字符串数组:
String[] result = my_string.split("\\s+"); // This is a regex for matching spaces
然后你可以遍历你的数组,取每个字符串的第一个字符:
// The string we'll create
String abbrev = "";
// Loop over the results from the string splitting
for (int i = 0; i < result.length; i++){
// Grab the first character of this entry
char c = result[i].charAt(0);
// If its a number, add the whole number
if (c >= '0' && c <= '9'){
abbrev += result[i];
}
// If its not a number, just append the character
else{
abbrev += c;
}
}