2017-04-12 130 views
-6

我正在开发一个应用程序,用户将使用语音进行交互。每当用户说第一,第二,第三等..我需要将字符串“第一”转换为int 1,字符串“second”转换为int 2.Java,Android - 如何将字符串转换为数字?

到目前为止,我发现的是(Java-Android How to convert letters in a string to specified number),转换每个字母串中的每个字母分别给相应的数字然后返回一些数字。但我不是我所需要的。我很困难。任何帮助,将不胜感激。

+2

这里没有内置的API。你将不得不完全自己写。你需要多少数字?如果它相对较小,一张简单的地图就可以做到。 –

+0

感谢您的回复,我知道没有内置的API。我没有多少数量可能增长。 – coders

+0

可能的重复http://stackoverflow.com/questions/4062022/how-to-convert-words-to-a-number – opatut

回答

1

如果定义与所有这些串主教名单,那么你可以使用的indexOf,让你正在寻找的价值,但仔细考虑空元素: 使用一个null-基数元素添加到列表或添加1至指数值

List<String> cardinal = Arrays.asList("first", "second", "third", .. etc); 
System.out.println(cardinal.indexOf("first") + 1); 
+1

感谢您的回复。我会利用这个逻辑。 – coders

+0

这是做不好的方法。 indexOf是O(n)。可怕的表现。 –

+0

@GabeSechan那你会有什么建议? – coders

3

没有确切的方法可以这样做。但得到的功能得到完成u可以使用开关箱 例如: -

switch(WordNumber) { 
    case First: 
     System.out.println(1); 
     return 1; 
     break; // optional 

    case Two: 
     System.out.println(2); 
     return 2; 
     break; // optional 

    // You can have any number of case statements. 
    default : // Optional 
     // Statements 
} 
+0

好的解决方案,因为OP在你的答案后评论说没有具体的限制,我会说答案仍然有效! – AxelH

0

我猜你至少有一些获取字符串值的方法是什么?

如果数字相对较小(〜10),那么hashmap可以做到这一点。只要事先手动保存并通过字符串查找它们。

HashMap<String, Integer> 

如果你有一个更大的列表(〜100),你将有一个方法将传入的int分成子数。因此,在这种情况下,您会查看十个值并将其与后值结合使用。

2 = Second 

22 - Twenty-second 

52 - Fifty-second 
1

您将需要拆分接收的值,以分析每个步骤。既然你没有有限的价值,你将需要为每个数字创建一张地图......这太多了。

所以才创造这样:

{ "one", "two", "three", ... "nine" } 
{ "ten, "twenty", "thirteen", ... "nineteen"} 
.. hundreds 
.. thousands 
.. specific case for eleven, twelves, ... 

然后,你需要西港岛线由劈裂它来分析价值像"twenty two"和搜索每个对应。

twenty = index 1 of tens array => (1 + 1) * 10 = 20 
two = 2 => index 1 in unit array => 1 + 1 = 2 

20 + 2 

22 

当然,这需要多思考一下,但这会给你一个很好的系统来读取每一个可能的数字。

相关问题