【问题标题】:QString SplittingQString 拆分
【发布时间】:2012-07-29 21:41:03
【问题描述】:

我有这些网址字符串

file:///home/we/Pictures/neededWord/3193_n.jpg

file:///home/smes/Pictures/neededWord/jds_22.png

file:///home/seede/kkske/Pictures/neededWord/3193_n.jpg

我想从它们中提取“neededWord”。从他们看来,图像的名称总是在“neededWord”之后,而字符串中的变化部分在“neededWord”之前。我想到的方法是使用“/”分隔符从右拆分字符串,并在结果QstringList中取第二个元素。那么如何从右边分裂,或者有更好的方法吗?

【问题讨论】:

    标签: qt qt4 split qstring


    【解决方案1】:

    好吧,你只需要倒数第二个元素:

    QStringList pieces = url.split( "/" );
    QString neededWord = pieces.value( pieces.length() - 2 );
    

    或者,您可以使用正则表达式。

    【讨论】:

      【解决方案2】:

      我是这样解决的:

      QStringList splitted = info.url().prettyUrl().split("/");
      *header   = splitted.at(splitted.findIndex(splitted.last()) - 1);
      

      【讨论】:

      • 为什么要搜索最后一项?您知道它的索引已经与您知道第一项位于索引 0 处的方式相同。这是一种非常奇怪的方式来处理如此简单的事情。
      【解决方案3】:

      我会使用 QString::lastIndexOf()QString::mid() 来防止不必要的 QString / QStringList 创建和销毁:

      // Example:
      //  0         1         2         3         4         5
      //  012345678901234567890123456789012345678901234567890
      // "file:///home/we/Pictures/neededWord/3193_n.jpg"
      
      QString neededWord;
      int const lastSlash = url.lastIndexOf('/'); // := 35
      int const prevSlash = url.lastIndexOf('/', -lastSlash - 1); // := 24
      if(lastSlash > prevSlash + 1 && prevSlash >= 0) {
          neededWord = url.mid(prevSlash, lastSlash - prevSlash - 1); // len := 10
      }
      

      根据您的需要,您可以使用QStringRef 进一步优化:

      QStringRef neededWordRef(&url, prevSlash, lastSlash - prevSlash - 1);
      

      【讨论】:

        【解决方案4】:

        或者像这样从我的头顶(未测试):

        QString neededWord = "";
        QString str = "file:///home/seede/kkske/Pictures/neededWord/3193_n.jpg";
        QRegExp rx(".*Pictures\\/(\\w+)\\/.*(?:jpg|png|gif|bmp|tiff)");
        rx.setMinimal(false);
        rx.setCaseSensitivity(Qt::CaseSensitive) // or use Qt::CaseInsensitive
        if (rx.indexIn(str) != -1) {
             neededWord = rx.cap(1);
         }
        

        “neededWord”应该在 requiredWord QString 中。正则表达式模式可以以更优雅的方式进行改进和编写,但我讨厌写那些:) 即使它们非常有用!

        【讨论】:

        • 他试图捕捉“neededWord”位置的文本,而不是图像的实际名称。
        • 糟糕,那我的错 :) 修复了它。我应该更仔细地阅读!谢谢。
        猜你喜欢
        • 2021-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-12
        • 2014-12-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多