qt - qstringlist - QString Splitting
qstring to string (4)
Tengo estas cadenas de url
archivo: ///home/we/Pictures/neededWord/3193_n.jpg
archivo: ///home/smes/Pictures/neededWord/jds_22.png
archivo: ///home/seede/kkske/Pictures/neededWord/3193_n.jpg
Quiero extraer la "palabra necesaria" de cada uno de ellos. Como se ve en ellos, el nombre de la imagen siempre está después de "neededWord" y la parte cambiante en la cadena está antes de "neededWord". La forma en que pensé es dividir la cadena usando el separador "/" de la derecha y tomar el segundo elemento en la QstringList resultante. Entonces, ¿cómo dividir de la derecha, o hay una mejor manera de hacerlo?
Bueno, solo tomarías el segundo al último elemento:
QStringList pieces = url.split( "/" );
QString neededWord = pieces.value( pieces.length() - 2 );
Alternativamente, podrías usar una expresión regular.
Lo arreglé de esta manera:
QStringList splitted = info.url().prettyUrl().split("/"); *header = splitted.at(splitted.findIndex(splitted.last()) - 1);
O algo así desde la parte superior de mi cabeza (no probado):
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" debe estar en neededWord QString. El patrón Regexp puede ser refinado y escrito de una manera más elegante, pero odio escribir esos :) incluso si son súper útiles.
QString::lastIndexOf()
junto con QString::mid()
para evitar la creación y destrucción innecesarias de 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
}
Dependiendo de sus necesidades, puede optimizar esto aún más utilizando un QStringRef :
QStringRef neededWordRef(&url, prevSlash, lastSlash - prevSlash - 1);