Extract file extension: Difference between revisions
Content added Content deleted
Thundergnat (talk | contribs) m (→{{header|Ring}}: Remove vanity tags) |
(Added Rust) |
||
Line 1,358: | Line 1,358: | ||
</pre> |
</pre> |
||
Apparently, the built-in method does not consider ".desktop" to be a file extension (on Linux). |
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}}== |
=={{header|Scala}}== |
||
<lang scala>package rosetta |
<lang scala>package rosetta |