23

私はこれらのURL文字列を持っています

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の2番目の要素を取得することです。では、右から分割する方法、またはそれを行うためのより良い方法はありますか?

4

4 に答える 4

44

さて、あなたは最後から2番目の要素を取るでしょう:

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

または、正規表現を使用することもできます。

于 2012-08-01T03:37:26.110 に答える
1

私はそれをこのように修正しました:

QStringList splitted = info.url().prettyUrl().split("/");
*header   = splitted.at(splitted.findIndex(splitted.last()) - 1);
于 2012-08-01T05:13:21.067 に答える
1

不要なQString/QStringListの作成と破棄を防ぐためQString::lastIndexOf()に、と一緒に使用します。QString::mid()

// 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);
于 2018-05-30T14:20:35.250 に答える
0

または私の頭のてっぺんからこのようなもの(テストされていません):

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」はneededWordQStringに含まれている必要があります。正規表現のパターンは洗練されてよりエレガントな方法で書くことができますが、それらが非常に便利であっても、私はそれらを書くのが嫌いです:)!

于 2012-08-02T12:50:54.257 に答える