Extract file extension: Difference between revisions

Added Rust
m (→‎{{header|Ring}}: Remove vanity tags)
(Added Rust)
Line 1,358:
</pre>
Apparently, the built-in method does not consider ".desktop" to be a file extension (on Linux).
 
=={{header|Rust}}==
<lang Rust>use std::path::Path;
 
fn main() {
let filenames = &[
"http://example.com/download.tar.gz",
"CharacterModel.3DS",
".desktop",
"document",
"document.txt_backup",
"/etc/pam.d/login",
];
 
for filename in filenames {
println!(
"{:34} | {:8} | {:?}",
filename,
extension(filename),
Path::new(filename).extension()
);
}
}
 
fn extension(filename: &str) -> &str {
filename
.rfind('.')
.map(|idx| &filename[idx..])
.filter(|ext| ext.chars().skip(1).all(|c| c.is_ascii_alphanumeric()))
.unwrap_or("")
}</lang>
The built-in method requires a filename before the extension, allows any non-period character to appear in the extension, and returns <code>None</code> if no extension is found.
{{out}}
<pre>
http://example.com/download.tar.gz | .gz | Some("gz")
CharacterModel.3DS | .3DS | Some("3DS")
.desktop | .desktop | None
document | | None
document.txt_backup | | Some("txt_backup")
/etc/pam.d/login | | None
</pre>
 
=={{header|Scala}}==
<lang scala>package rosetta
Anonymous user