我想将java代码转换为快速面对问题。任何帮助表示赞赏。
Java代码:
for(String s: str){
char arr[] = new char[26]
for(int i =0;i< s.length(); i++){
arr[s.charAt(i) -'a']++;
}
}
Swift Code:
以下是扩展和课程。
extension String {
var asciiArray: [UInt32] {
return unicodeScalars.filter{$0.isASCII}.map{$0.value}
}
}
extension Character {
var asciiValue: UInt32? {
return String(self).unicodeScalars.filter{$0.isASCII}.first?.value
}
}
class GroupXXX{
func groupXXX(strList: [String]){
for str in strList{
var charArray = [Character?](repeating: nil, count: 26)
var s = str.characters.map { $0 }
for i in 0..<s.count{
charArray[(s[i].asciiValue)! - ('a'.asciiValue)!]++
}
}
}
}
错误:
single-quoted string literal found, use '"' charArray[(s[i].asciiValue)! - ('a'.asciiValue)!]++ ^~~ "a"
答案 0 :(得分:2)
Swift代码中存在几个问题:
++
运算符。s[i]
无法编译,因为Swift字符串未被索引
整数。[Character?]
没有任何意义,你也做不到
增加Character?
。 Swift相当于Java char
将是UInt16
。显然你想要计算出现次数 每个角色&#34; a&#34;到&#34; z&#34;在一个字符串中。 这就是我在Swift中的表现:
unicodeScalars
属性。然后不再需要自定义扩展,代码变为
var frequencies = [Int](repeating: 0, count: 26)
for c in str.unicodeScalars {
switch c {
case "a"..."z":
frequencies[Int(c.value - UnicodeScalar("a").value)] += 1
default:
break // ignore all other characters
}
}
答案 1 :(得分:1)
charArray[(s[i].asciiValue)! - ('a'.asciiValue)!]++
正如错误所说,使用双引号,Swift没有区分字符和字符串的语法(字符本身可能是swift中的字节序列)。
如果编译器无法区分,您可能需要明确强制该字符为Character
。
charArray[(s[i].asciiValue)! - (Character("a").asciiValue)!]++