2012-08-01 23 views
15

Tôi có những chuỗi urlQString Chia

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

tôi muốn trích xuất các "neededWord" từ mỗi trong số họ. Khi nó xuất hiện từ họ, tên của hình ảnh luôn luôn là sau "necessaryWord" và phần thay đổi trong chuỗi là trước "necessaryWord". Cách tôi nghĩ là chia chuỗi bằng cách sử dụng "/" seperator từ bên phải và lấy phần tử thứ hai trong kết quả QstringList. Vì vậy, làm thế nào để phân chia từ phải, hoặc là có một cách tốt hơn để làm điều đó?

Trả lời

29

Vâng, bạn sẽ chỉ mất lần thứ hai để yếu tố cuối cùng:

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

Ngoài ra, bạn có thể sử dụng một biểu thức chính quy.

0

tôi cố định nó theo cách này:

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

Tại sao bạn cần phải tìm kiếm mục cuối cùng? Bạn biết chỉ số của nó là gì giống như cách bạn biết mục đầu tiên ở chỉ mục 0. Đây là một cách rất đơn giản để đi về một cái gì đó rất đơn giản. – Chris

0

Hoặc một cái gì đó như thế này từ đỉnh đầu của tôi (không kiểm tra):

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" phải ở trong neededWord QString. Mô hình Regexp có thể được tinh chỉnh và viết theo cách thanh lịch hơn nhưng tôi ghét viết những thứ đó :) ngay cả khi chúng cực kỳ hữu ích!

+0

Anh ấy đang cố chụp lại văn bản nằm ở vị trí "necessaryWord", không phải tên thực của hình ảnh. – Chris

+0

Rất tiếc, lỗi của tôi rồi :) đã sửa nó. Tôi nên đọc cẩn thận hơn! Thanx. – sadjoker

Các vấn đề liên quan