【问题标题】:Get all the substrings from url between two different characters android从两个不同字符android之间的url获取所有子字符串
【发布时间】:2016-06-26 14:21:00
【问题描述】:

我有一个这样的网址

https://example.com/Result.aspx?PaymentID=6543210987654321&Result=NOT%20CAPTURED&PostDate=0305&TranID=4589644171260650&Auth=&Ref=606512084038&TrackID=9105423&UDF1=10.000

由此我想提取 =& 之间的字符串。

我用来获取这个的代码是

    String[] b=new String[10];
         a= weburl.split("=");
         for(i=0; i< a.length; i++)
        {
         b = a[i].split("&");
        }

但是通过使用它,我只得到了数组中最后一个索引的最后一个字符串(url 中的最后一个 10.00)。 我也试过用这个

    for(i=0;i<=weburl.length;i++)    
   weburl.substring(weburl.indexOf("=")+1,weburl.indexOf("&"));

它只给出 url 的第一个子字符串,它位于 =& 之间,即 6543210987654321 ..

但我想要介于两者之间的所有这些字符串..

帮助表示赞赏!

【问题讨论】:

    标签: android arrays url for-loop split


    【解决方案1】:
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class Test {
        public static void main(String[] args) {
            String regex = "=(([^&])+)&";
            Matcher matcher = Pattern.compile(regex).matcher("https://example.com/Result.aspx?PaymentID=6543210987654321&Result=NOT%20CAPTURED&PostDate=0305&TranID=4589644171260650&Auth=&Ref=606512084038&TrackID=9105423&UDF1=10.000");
            while(matcher.find()){
                System.out.println(matcher.group(1));
            }
    
        }
    }
    

    【讨论】:

      【解决方案2】:

      代替

          a= weburl.split("=");
       for(i=0; i< a.length; i++)
      {
       b = a[i].split("&");
      }
      

      尝试使用

      List<String> b = new ArrayList<>();
      a= weburl.split("&");
       for(i=0; i< a.length; i++)
      {
       b.add(a[i].substring(a[i].indexOf("=")+1));
      }
      

      【讨论】:

      • 谢谢..它的工作..但在子字符串之前也得到 = ..将 a[i].indexOf("=")) 更改为 a[i].indexOf("=" )+1) 还有.. @Milan Vucic
      • 添加 +1 解决了吗?
      • 好吧,无论有没有 +1,都不可能获得相同的字符串。尝试 +2 看看你得到了什么,也许有一些不必要的空格或我们没有预料到的东西。这应该适用于您提供的链接,也许您的原始链接不同?介意张贴吗?
      • 同一个链接..我刚刚替换了example.com
      • 字符串列表中的每个条目都称为 b,开头有这个 = 吗?
      【解决方案3】:

      您可以按照步骤获得正确的结果

      • 首先取?的第一个索引到末尾的子字符串
      • 使用&amp;拆分字符串
      • 使用循环,使用= 拆分每个条目
      • 然后从该数组中获取第二部分。

      示例代码

          String url = "https://example.com/Result.aspx?PaymentID=6543210987654321&Result=NOT%20CAPTURED&PostDate=0305&TranID=4589644171260650&Auth=&Ref=606512084038&TrackID=9105423&UDF1=10.000";
          String parameters[] = url.substring(url.indexOf("?") + 1).split("&");
          for (String parameter : parameters) {
              try {
                  String[] parts = parameter.split("=");
                  String name = parts[0];
                  if(parts.length == 2) {
                      String enValue = parts[1];
                      String value = java.net.URLDecoder.decode(enValue, "UTF-8");
                      System.out.println(name + " = " + value);
                  } else {
                      System.out.println(name + " = ");
                  }
              } catch (Exception ex) {
                  ex.printStackTrace(System.err);
              }
          }
      

      希望对你有所帮助。

      【讨论】:

      • 我什至比我的解决方案更喜欢它:D
      • java.net.URLDecoder.decode(enValue, "UTF-8");你能解释一下吗? @ELITE 我们可以跳过那一行吗?
      • 这一行是为了解码参数值..因为这些是在给定的 url 字符串中编码的。
      • 示例:NOT%20CAPTURED 将转换为NOT CAPTURED
      • System.out.println(name + " = " + value);从这里我只得到最后一个子字符串 UDF1=10.000 @ELITE
      【解决方案4】:

      你能试试这个吗?

      String[] array = url.split("=");
      for (int i = 1; i < array.length; i++) {
          String[] subArray = array[i].split("&");
          if (subArray.length > 0) {
              Log.e("VALUE", subArray[0]);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2021-08-27
        • 2015-05-05
        • 1970-01-01
        • 1970-01-01
        • 2021-04-04
        • 1970-01-01
        • 1970-01-01
        • 2013-09-12
        • 1970-01-01
        相关资源
        最近更新 更多