我有一个List [String],例如:
val test=List("this is, an extremely long sentence. Check; But. I want this sentence.",
"Another. extremely. long. (for eg. description). But I want this sentence.",
..)
我希望结果如下:
List("I want this sentence", "But I want this sentence"..)
我尝试了一些方法但没有工作
test.map(X => “中。” x.split()reverse.head)
test.map(X => x.split()最后的 “”)
答案 0 :(得分:3)
尝试使用此
test.reverse.head.split("\\.").last
处理任何Exception
Try(List[String]().reverse.head.split("\\.").last).getOrElse("YOUR_DEFAULT_STRING")
答案 1 :(得分:2)
您可以map
List
split
String
val list = List("this is, an extremely long sentence. Check; But. I want this sentence.",
"Another. extremely. long. (for eg. description). But I want this sentence.")
list.map(_.split("\\.").last.trim)
,然后选择最后一个元素。请尝试以下代码。
List(I want this sentence, But I want this sentence)
它会给你
boolean isFirstElement = true;
for (int i = 0; i < pList.size() - 1; i++) {
Point pointOne = pList.get(i);
for (int j = i + 1; j < pList.size(); j++) {
Point pointTwo = pList.get(j);
if (j + 1 == pList.size() && isFirstElement) {
continue;
} else {
// your comparison logic goes here...
}
}
isFirstElement = false;
}
答案 2 :(得分:1)
您可以通过多种方式执行此操作:
对于原始列表中的每个字符串:按.
拆分,反转列表,取第一个值
test.map(_.split('.').reverse.headOption)
// List(Some( I want this sentence), Some( But I want this sentence))
.headOption
会产生Some("string")
或None
,您可以在其上执行类似.getOrElse("no valid string found")
的操作。如果需要,可以修剪不需要的空格。
正则表达匹配
test.map { sentence =>
val regex = ".*\\.\\s*([^.]*)\\.$".r
val regex(value) = sentence
value
}
这将获取一个较长字符串末尾的任何字符串,该字符串前面有句号和空格,后跟一个句号。您可以修改正则表达式以更改正则表达式的确切规则,如果您希望学习更多正则表达式,我建议您使用regex101.com。它非常好。
此解决方案更适合更复杂的示例和要求,但值得记住。如果你担心正则表达式可能不匹配,你可以做一些事情,比如在解压缩之前检查正则表达式是否匹配:
test.map { sentence =>
val regexString = ".*\\.\\s*([^.]*)\\.$"
val regex = regexString.r
if(sentence.matches(regexString)) {
val regex(value) = sentence
value
} else ""
}
在按.
test.map(_.split('.').map(_.trim).lastOption)
答案 3 :(得分:0)
test.map (_.split("\\.").last)
Split采用正则表达式,因此,点代表每个字符,所以你必须掩盖它。
也许你想要包含问号和刘海:
test.map (_.split("[!?.]").last)
修剪周围的空白:
test.map (_.split("[!?.]").last.trim).
reverse.head
如果没有last
,那么scala> test.map (_.split("[!?.]").reverse.head.trim)
res138: List[String] = List(I want this sentence, But I want this sentence)
就是个好主意:
Playlist: [{
Format: 'HLSv3',
Name: newKey + '.m3u8',
OutputKeys: [
newKey + '.ts'
]
}]