【问题标题】:Operation on strings to remove prefix对字符串进行操作以删除前缀
【发布时间】:2013-02-26 15:05:45
【问题描述】:
final Intent mainIntent=new Intent(Intent.ACTION_MAIN,null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER) ;
final PackageManager pm = getApplicationContext().getPackageManager();
ArrayList<ResolveInfo> listP= (ArrayList<ResolveInfo>) pm.queryIntentActivities( mainIntent, 0);

//Drawable iconApp = resolveInfo.activityInfo.loadIcon(getPackageManager());

ApplicationAdapter adapter = new ApplicationAdapter(this, listP);

adapter.addListener(this);
ListView list = (ListView)findViewById(R.id.list);

list.setAdapter(adapter);

此代码显示所有可用的应用程序,但我想处理结果。在每一行你都有com.android.*,这是我想删减的部分。

问题是当我尝试使用 substring(10) 时,例如它不会改变结果。

我尝试过这种方式,并且使用 Log 我成功了子字符串,但是当我在屏幕上显示它时,它只会向我显示另一个带有他所有按钮的布局 我几乎用这段代码得到它 我用 Log 显示我想在屏幕上显示的内容,但是只有一块黑板,而我用 Log 得到了正确的结果 我看不出原因

public void onCreatebis() {

        setContentView(R.layout.main);
        final Intent mainIntent=new Intent(Intent.ACTION_MAIN,null);
        mainIntent.addCategory(Intent.CATEGORY_LAUNCHER) ;
        final PackageManager pm = getApplicationContext().getPackageManager();
        ArrayList<ResolveInfo> listP= (ArrayList<ResolveInfo>) pm.queryIntentActivities( mainIntent, 0);
        final int trimLength = "com.android.".length();
        ArrayList<String> maliste = new ArrayList();
        int size=listP.size();
        size=maliste.size();
       //String []maliste=new String[listP.size()];
        // Loop over each item.
        for (ResolveInfo info : listP) {
            // Get the (full, qualified) package name.
            String packag = info.activityInfo.applicationInfo.packageName;

            // Now, trim it with substring and the trim length.
            String trimmed = packag.substring(trimLength);
            for(int i=0;i<maliste.size();i++){
                maliste.set(i, trimmed);
            }
            Log.v("trimmed", trimmed);

            // [ do whatever you want with the trimmed name ]
        }




        ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, maliste);

        ListView list = (ListView)findViewById(R.id.list);

        list.setAdapter(adapter2);

【问题讨论】:

  • 你叫什么 substring(10) on?在您提供的示例中,我没有看到任何字符串操作代码。

标签: java android string substring


【解决方案1】:

您有正确的想法来使用substring。以下是我将如何去做:

// Get the length of text to trim.
final int trimLength = "com.android.".length();

// Loop over each item.
for (ResolveInfo info : listP) {
    // Get the (full, qualified) package name.
    String package = info.activityName.packageName;

    // Now, trim it with substring and the trim length.
    String trimmed = package.substring(trimLength);

    // [ do whatever you want with the trimmed name ]
}

trimLength 的值计算为 12,所以我不确定你是如何得到 10 的,但这应该可以。

【讨论】:

  • 我在 String package = info.activityName.packageName 上遇到错误; // 现在,用子字符串和修剪长度修剪它。 String trimmed = package.substring(trimLength);
  • @Bob:能否请您更新原始问题(单击编辑)并粘贴错误的堆栈跟踪?
【解决方案2】:

感谢 WChargin 在您的帮助下,我做到了,虽然存在细微差别,但我不知道它们之间的深层差异,因为代码运行良好

public void onCreatebis() {

        setContentView(R.layout.main);
        final Intent mainIntent=new Intent(Intent.ACTION_MAIN,null);
        mainIntent.addCategory(Intent.CATEGORY_LAUNCHER) ;
        final PackageManager pm = getApplicationContext().getPackageManager();
        ArrayList<ResolveInfo> listP= (ArrayList<ResolveInfo>) pm.queryIntentActivities( mainIntent, 0);
        final int trimLength = "com.android.".length();
        ArrayList<String> maliste = new ArrayList<String>();


       //String []maliste=new String[listP.size()];
        // Loop over each item.
        for (ResolveInfo info : listP) {
            // Get the (full, qualified) package name.
            String packag = info.activityInfo.applicationInfo.packageName;

            // Now, trim it with substring and the trim length.
            String trimmed = packag.substring(trimLength);
            maliste.add(trimmed);



        }

        ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, maliste);

        ListView list = (ListView)findViewById(R.id.list);

        list.setAdapter(adapter2);



    }

该解决方案的问题是我最后有一个字符串,当然我可以设法创建一个包含所有字符串的数组并将其提供给适配器,但是我无法再进行其他操作,因为它使用的是 ResolveInfo 的数组列表而不是字符串的数组列表 add your own listener to a list https://stackoverflow.com/questions/15383453/dealing-with-adapter-listview-and-listener

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    • 2019-12-09
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    相关资源
    最近更新 更多