我正在编码的这个特殊类从文本文件中获取其输入,该文本文件是从调查图上使用的OCR软件获得的。输入数据相当脏,这个类的目的是清理它,最后将它分配给一个对象数组,然后由其他类使用。
现在我的问题:我需要能够识别4种不同类型的字符集。如果我的代码在行的开头找到它们,它知道特定的行需要包含在我想要使用的String []数组中。它需要识别的四个集合格式为“AZ”,“A1Z1”,“ZA1”“Z1A”(可以是任何字母字符和1-9个数字)
String typeOne = "AZ1063.662521446A63764.73138685.41"
哪个被分成了 “AZ”,1063.66,“2521446”,“A”,63764.73,138675.41
String typeTwo = "A1Z11063.662521446A63764.73138685.41"
分为“A1Z1”,1063.66,“2521446”,“A1”,63764.73,138675.41
String typeThree "ZA111063.662521446A63764.73138685.41"
分为:“ZA1”,1063.66,“2521446”,“Z”,63764.73,138675.41
String typeFour "Z1A1063.662521446A63764.73138685.41"
分为“Z1A”,1063.66,“2521446”,“Z1”,63764.73,138675.41
现在问题是到目前为止我设法设计的每个测试都无法区分typeOne和typeThree,因为两个字符串中的第三个字符始终是一个数字,而这些字符串从不具有固定长度。我真的很好奇我如何能够发现两种类型之间的区别。
编辑:为了澄清 - 我想要的第二组数据,在初始'标识符'(AZ1)之后将转换为double(1063.66)。这意味着我需要识别AZ1的情况,因此1不会被添加到double(11063.66)。虽然如果组成弦的不同部分具有固定的长度,这将是相对简单的,但它们不是,因此问题。
答案 0 :(得分:0)
对不起,您为什么不使用正则表达式匹配?如果在案例3中,首字母等于第18个字母(从您给出的示例中可以看出),这就是表达式
s.matches("^[A-Z]{2}[0-9].*") && (s.charAt(0) == s.charAt(18));
如果case3字符串比case1长(从你给出的例子看来),这就是表达式
s3.matches("^[A-Z]{2}.{34}");
答案 1 :(得分:-2)
你可以使用方法startsWith()之类的;
let alert = UIAlertController(title: “Got it”, message: “Please, select:”, preferredStyle: UIAlertControllerStyle.Alert)
name01: String = "name01"
name02: String = "name02"
name03: String = "name03"
if switch01.on {
let action01 = UIAlertAction(title: name01, style: .Default) { (_) in }
}
if switch02.on {
let action02 = UIAlertAction(title: name02, style: .Default) { (_) in }
}
if switch03.on {
let action03 = UIAlertAction(title: name03, style: .Default) { (_) in }
}
let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel) { (_) in }
alert.addAction(action01)//Cannot convert value of type 'String' to expected argument type 'UIAlertAction'
alert.addAction(action02)//Cannot convert value of type 'String' to expected argument type 'UIAlertAction'
alert.addAction(action03)//Cannot convert value of type 'String' to expected argument type 'UIAlertAction'
alert.addAction(cancelAction)//No error
第二行将返回true;