如何将字符串转换为类名,反之亦然

时间:2014-09-18 12:24:31

标签: java android

我有一些从superClass管理的活动(Main1,Main2 ... Mainn)所以我试图做但失败的是从Main i移动到Main i + 1到一个按钮(nextPage ),为了不重复相同的代码n次我试图将ClassName转换为Integer得到它的数字(i),然后我将该数字(i + 1)连接成一个字符串,然后将字符串转换为从Button(nextPage)调用它的类类型。这是代码:我编辑了我的代码,这是一个完美的解决方案:

str = getClass().getName();// this code line converts the class name to string
    int num = Integer.parseInt(str.substring(str.indexOf("_") + 1)); //this extracts integer from string

    str1 = "com.example.Test.Main_" + (num + 1);//this is a pure concatenation
    str2 = "com.example.Test.Main_" + (num - 1);//this is a pure concatenation

    try {
        nextClass = Class.forName(str1);// this how to convert string to a class name

        i10.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(getApplicationContext(), nextClass);
                startActivity(i);
                str = nextClass.getName();
                overridePendingTransition(R.anim.pushin, R.anim.pushout);

            }
        });

    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }

3 个答案:

答案 0 :(得分:0)

查找Integer.parseInt(String)的文档:字符串中的字符必须全部为十进制数字

答案 1 :(得分:0)

如果你想获得当前的类名,你应该使用它:

String str = getClass().getName();

现在str是Main1,Main2,....所以你不能解析它,因为它不是String。您可以使用以下格式重命名您的课程:Main_1,Main_2,...并更改您的代码:

int num = Integer.parseInt(str.substring(str.indexOf("_") + 1));
str1="Main_"+(num+1);
Class nextClass=Class.forName("com.example.Test."+ str1);

答案 2 :(得分:0)

试试这段代码。应该工作

String str = getClass().toString();
Integer num = Integer.parseInt(str.replaceAll("\\D+",""));
str1="Main"+ String.valueOf(num+1);
Class<?> nextClass;
    try {
        nextClass = Class.forName("com.example.Test" + str );


    i10.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(getApplicationContext(), nextClass);
            startActivity(i);
            overridePendingTransition(R.anim.pushin, R.anim.pushout);

        }
    });

    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }