-1

在这里,如果我的用户名是 Rus7AE,那么我想取数值,即右起第三个字符。te 7. 下面的代码没有返回值 7 吗?

studentA 由第 5-7 个标准组成 studentB 由第 8-10 个标准组成 studentC 由第 5-10 个标准组成,这是公共组,但不包含来自 studentA 和 studentB 的相同值

private void authcheck()
        {
            username = Session["stud"].ToString();
            schlName = Session["stuschname"].ToString();

        string value = username.ToString();
        int groupName = Convert.ToInt32(value[value.Length - 3]);            

        Session["grpName"] = groupName.ToString();
}

我怎样才能得到倒数第三个值

4

3 回答 3

3

您正在尝试将字符转换为数值,这不会给出预期的结果。

尝试

int groupName = int.Parse(value.Substring(value.Length - 3, 1));

如果您可能会收到不是这种格式的数据,请查看int.TryParse

Convert.ToInt32 不起作用,因为它根据当前编码获取字符的实际值并将其转换为字符。例如,

int val = Convert.ToInt32('7');

产生 55,这是 '7' 的 ASCII 或 UTF-8 代码。

于 2012-08-27T19:46:30.413 回答
2

您没有得到倒数第三个值,因为条件错误

if
    5-7
else if
    8-10
else if 
    5-10

在这种情况下,最后一个永远不会被击中

于 2012-08-27T19:51:38.987 回答
0

因为你的组号中可以有“10”(正如我在你的代码中看到的那样),也许还有更多的两位数(11、12、13 等),我们应该在这里使用正则表达式......

var regex = new Regex(@"\w+(\d+)\w+");

int groupNumber;
var match = regex.Match(subjectString);
if(!match.Success || !match.Groups[1].Success || !int.TryParse(match.Groups[1].Value, out groupNumber))
    throw new Exception("Student has no group!?!?");

string groupName = null;
switch(groupNumber){
    case 5:
    case 6:
    case 7:
        groupName = "studentA";
    break;

    case 8:
    case 9:
    case 10:
        groupName = "studentB";
    break;

    case 1:
    case 2:
    case 3:
    case 4:
        groupName = "studentC";
    break;

    default:
        throw new Exception("invalid group number");
}
于 2012-08-27T19:53:11.330 回答