Text between: Difference between revisions
Content added Content deleted
Thundergnat (talk | contribs) (Remove redundant copy of Sidef example) |
(Add Rust implementation) |
||
Line 2,281: | Line 2,281: | ||
puts returnText |
puts returnText |
||
</lang> |
</lang> |
||
=={{header|Rust}}== |
|||
<lang Rust> |
|||
//Use Into<String> so input can be String, &str or anything else that implements Into<String> |
|||
fn text_between<S: Into<String>>(input: S, start: S, end: S) -> String { |
|||
//Convert to strings |
|||
let search_str = input.into(); |
|||
let start_str = start.into(); |
|||
let end_str = end.into(); |
|||
let start_idx = if start_str.as_str() == "start" { |
|||
0 |
|||
} else { |
|||
let start_point = search_str.find(start_str.as_str()); |
|||
if start_point.is_none() { |
|||
return String::from(""); |
|||
} |
|||
start_point.unwrap() + start_str.len() |
|||
}; |
|||
let remaining = &search_str[start_idx..]; |
|||
let end_idx = if end_str.as_str() == "end" { |
|||
remaining.len() |
|||
} else { |
|||
remaining.find(end_str.as_str()).unwrap_or(remaining.len()) |
|||
}; |
|||
return remaining[..end_idx].to_string() |
|||
} |
|||
fn main() { |
|||
println!("'{}'", text_between("Hello Rosetta Code world", "Hello ", " world")); |
|||
println!("'{}'", text_between("Hello Rosetta Code world", "start", " world")); |
|||
println!("'{}'", text_between("Hello Rosetta Code world", "Hello", "end")); |
|||
println!("'{}'", text_between("</div><div style=\"chinese\">你好嗎</div>", "<div style=\"chinese\">", "</div>")); |
|||
println!("'{}'", text_between("<text>Hello <span>Rosetta Code</span> world</text><table style=\"myTable\">", "<text>", "<table>")); |
|||
println!("'{}'", text_between("<table style=\"myTable\"><tr><td>hello world</td></tr></table>", "<table>", "</table>")); |
|||
println!("'{}'", text_between("The quick brown fox jumps over the lazy other fox", "quick ", " fox")); |
|||
println!("'{}'", text_between("One fish two fish red fish blue fish", "fish ", " red")); |
|||
println!("'{}'", text_between("FooBarBazFooBuxQuux", "Foo", "Foo")); |
|||
} |
|||
</lang> |
|||
{{out}} |
|||
<pre> |
|||
'Rosetta Code' |
|||
'Hello Rosetta Code' |
|||
' Rosetta Code world' |
|||
'你好嗎' |
|||
'Hello <span>Rosetta Code</span> world</text><table style="myTable">' |
|||
'' |
|||
'brown' |
|||
'two fish' |
|||
'BarBaz' |
|||
</pre> |
|||
=={{header|Scala}}== |
=={{header|Scala}}== |
||
<lang Scala>object TextBetween extends App { |
<lang Scala>object TextBetween extends App { |