题目是:一段字符串,要求取第二个英文字母前的字符。
例:B022**A**1111-1
我想取得第二个英文字母前面的字符,如何识别这个英文字符呢?(A的字符位置不定,不得用位数来取)
谢谢,
public string GetSubstring(string s)
{
string r = "";
int charNum=0;
for (int i = 0; i < s.Length; i++) {
if ((s[i] >= 'A' && s[i] <= 'Z')
|| (s[i] >= 'a' && s[i] <= 'z')
) charNum++;
if (charNum >= 2) break;
r += s[i];
}
return r;
}
Response.Write(GetSubstring("B022A1111-1") + "<BR>");
Response.Write(GetSubstring("022A111B1-1") + "<BR>");
@Test
public void testStr(){
String str="B02a241A**1111-1";
int flag=0;
for(int i=0;i<str.length();i++){//遍历字符串
char c=str.charAt(i);// c为字符串中的字符
if( ('a'<=c && c<='z')||('A'<=c && c<'Z') ){
flag++;
if(flag==2){
// str.charAt(i-1) 就是第二个英文字母前的字符!!!!
System.out.println(str.charAt(i-1));
break;
}
}
}
}
^[A-Za-z]+$ 用正则表达式判断获取字符串
用for循环变量
string str="B022**A**1111-1";
//将str字符串转化为数组
int i,index=0,len;
for( i=0 ; i < str.length ; i ++){
if(str[i].match('^[A-Za-z]+$')){
index+=1;
}
if(index==2){
len=i;
}
}
//打印第二个英文字母前面的字符长度 len+1
//然后截取
大致思路应该这样,自己简单写的回答的不好,勿怪
char数组c接收字符串 c[i]for循环 ch=c[i] 如果ch>='a'&&ch<='z'||ch>='A'&&ch<='Z'count++;当count=2 输出c[i-1]
以上是java实现的,C#思路差不多。希望可以帮助到你!
split函数 直接从你要取的字符切分 split('A') 然后 split('A')[0]就是你前面的字符 当然你这个字符串中不能有其他字符
如果你的第一个字符是字母的话,我就建议你用正则表达式直接获取;
表达式内容是 ([A-Za-z].*?)[A-Za-z].*
然后匹配捕获组就可以了;
c#不了解,我这里给你写个js和java版本的参考吧
javascript:
var orig = 'B1823****213C247823A384B';
var reg = /([A-Za-z].*?)[A-Za-z].*/g;
var result = reg.exec(orig);
//查看是否有捕获结果
if(result){//第一组
//alert(result[1]);
console.log(result[1]);
}
java:
public static void test() {
String orig = "B1823****213C247823A384B";
Pattern pattern = Pattern.compile("([A-Za-z].*?)[A-Za-z].*");
Matcher matcher = pattern.matcher(orig);
if(matcher.find()) {
System.out.println("----------->" + matcher.group(1));//第一个捕获组数据
}
}
希望对你有帮助....