所以我有String
个整数看起来像"82389235"
,但我想迭代它以将每个数字分别添加到MutableList
。但是,当我按照我认为可以处理的方式进行处理时:
var text = "82389235"
for (num in text) numbers.add(num.toInt())
这会将与字符串完全无关的数字添加到列表中。然而,如果我使用println
将它输出到控制台,它会很好地遍历字符串。
如何正确地将Char
转换为Int
?
答案 0 :(得分:16)
那是因为>>> ddbr = boto3.resource('dynamodb')
>>> table = ddbr.Table('employees')
>>> table.get_item(Key={'EmpId': {'S': '13456789ABC'}})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/qwert/miniconda2/envs/pyenv36/lib/python3.6/site-packages/boto3/resources/factory.py", line 520, in do_action
response = action(self, *args, **kwargs)
File "/Users/qwert/miniconda2/envs/pyenv36/lib/python3.6/site-packages/boto3/resources/action.py", line 83, in __call__
response = getattr(parent.meta.client, operation_name)(**params)
File "/Users/qwert/miniconda2/envs/pyenv36/lib/python3.6/site-packages/botocore/client.py", line 312, in _api_call
return self._make_api_call(operation_name, kwargs)
File "/Users/qwert/miniconda2/envs/pyenv36/lib/python3.6/site-packages/botocore/client.py", line 601, in _make_api_call
raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (ValidationException) when calling the GetItem operation: The provided key element does not match the schema
是num
,即结果值是该字符的ascii值。
这样可以解决问题:
Char
val txt = "82389235"
val numbers = txt.map { it.toString().toInt() }
可以进一步简化:
map
答案 1 :(得分:6)
在JVM上有效率java.lang.Character.getNumericValue()可用:
val numbers: List<Int> = "82389235".map(Character::getNumericValue)
答案 2 :(得分:4)
变量num
的类型为Char
。在此处调用toInt()
将返回其ASCII码,以及您要添加到列表中的内容。
如果要附加数值,可以从每个数字中减去0的ASCII码:
numbers.add(num.toInt() - '0'.toInt())
这样有点好看:
val zeroAscii = '0'.toInt()
for(num in text) {
numbers.add(num.toInt() - zeroAscii)
}
这也适用于map
操作,因此您根本不必创建MutableList
:
val zeroAscii = '0'.toInt()
val numbers = text.map { it.toInt() - zeroAscii }
或者,您可以将每个字符单独转换为String
,因为String.toInt()
实际上会解析数字 - 这对于创建的对象而言似乎有点浪费:
numbers.add(num.toString().toInt())
答案 3 :(得分:0)
为清楚起见,zeroAscii答案可以简化为
val numbers = txt.map { it - '0' }
为Char-Char-> Int。如果您希望减少键入的字符数,那是我知道的最短答案。
val numbers = txt.map(Character::getNumericValue)
但是,可能是最清晰的答案,因为它不需要读者了解有关ASCII代码的低级详细信息。 toString()。toInt()选项需要最少的ASCII或Kotlin知识,但有点怪异,可能会使您的代码读者感到最困惑(尽管这是我在调查是否确实存在错误之前用来解决错误的东西不是更好的方法!)