Camel case and snake case: Difference between revisions

Added Easylang
m (remove draft tag)
(Added Easylang)
 
(16 intermediate revisions by 10 users not shown)
Line 464:
c://my-docs/happy_Flag-Day/12.doc => camel: c://my-docs/happyFlag-Day/12.doc snake: c://my-docs/happy__flag-_day/12.doc
spaces => camel: spaces snake: spaces</pre>
 
=={{header|C++}}==
The output of this example reflects the author's interpretation of the task.
<syntaxhighlight lang="c++">
 
#include <algorithm>
#include <iomanip>
#include <iostream>
#include <string>
#include <vector>
 
const char HYPHEN = '-';
const char SPACE = ' ';
const char UNDERSCORE = '_';
const std::string WHITESPACE = " \n\r\t\f\v";
 
std::string left_trim(const std::string& text) {
size_t start = text.find_first_not_of(WHITESPACE);
return ( start == std::string::npos ) ? "" : text.substr(start);
}
 
std::string right_trim(const std::string& text) {
size_t end = text.find_last_not_of(WHITESPACE);
return ( end == std::string::npos ) ? "" : text.substr(0, end + 1);
}
 
std::string trim(const std::string& text) {
return left_trim(right_trim(text));
}
 
void prepare_for_conversion(std::string& text) {
text = trim(text);
std::replace(text.begin(), text.end(), SPACE, UNDERSCORE);
std::replace(text.begin(), text.end(), HYPHEN, UNDERSCORE);
}
 
std::string to_snake_case(std::string& camel) {
prepare_for_conversion(camel);
std::string snake = "";
bool first = true;
for ( const char& ch : camel ) {
if ( first ) {
snake += ch;
first = false;
} else if ( ! first && ch >= 'A' && ch <= 'Z' ) {
if ( snake[snake.length() - 1] == UNDERSCORE ) {
snake += tolower(ch);
} else {
snake += UNDERSCORE;
snake += tolower(ch);
}
} else {
snake += ch;
}
}
return snake;
}
 
std::string to_camel_case(std::string& snake) {
prepare_for_conversion(snake);
std::string camel = "";
bool underscore = false;
for ( const char& ch : snake ) {
if ( ch == UNDERSCORE ) {
underscore = true;
} else if ( underscore ) {
camel += toupper(ch);
underscore = false;
} else {
camel += ch;
}
}
return camel;
}
 
int main() {
const std::vector<std::string> variable_names = { "snakeCase", "snake_case", "variable_10_case",
"variable10Case", "ergo rE tHis", "hurry-up-joe!", "c://my-docs/happy_Flag-Day/12.doc", " spaces " };
 
std::cout << std::setw(48) << "=== To snake_case ===" << std::endl;
for ( std::string text : variable_names ) {
std::cout << std::setw(34) << text << " --> " << to_snake_case(text) << std::endl;
}
 
std::cout << std::endl;
std::cout << std::setw(48) << "=== To camelCase ===" << std::endl;
for ( std::string text : variable_names ) {
std::cout << std::setw(34) << text << " --> " << to_camel_case(text) << std::endl;
}
}
</syntaxhighlight>
{{ out }}
<pre>
=== To snake_case ===
snakeCase --> snake_case
snake_case --> snake_case
variable_10_case --> variable_10_case
variable10Case --> variable10_case
ergo rE tHis --> ergo_r_e_t_his
hurry-up-joe! --> hurry_up_joe!
c://my-docs/happy_Flag-Day/12.doc --> c://my_docs/happy_flag_day/12.doc
spaces --> spaces
 
=== To camelCase ===
snakeCase --> snakeCase
snake_case --> snakeCase
variable_10_case --> variable10Case
variable10Case --> variable10Case
ergo rE tHis --> ergoRETHis
hurry-up-joe! --> hurryUpJoe!
c://my-docs/happy_Flag-Day/12.doc --> c://myDocs/happyFlagDay/12.doc
spaces --> spaces
</pre>
 
=={{header|Delphi}}==
{{works with|Delphi|6.0}}
{{libheader|SysUtils, StdCtrls}}
Makes use of Delphi "sets" to help parse strings.
 
 
<syntaxhighlight lang="Delphi">
const TestStrings: array [0..7] of string = (
'snakeCase', 'snake_case', 'variable_10_case', 'variable10Case',
'\u025brgo rE tHis', 'hurry-up-joe!', 'c://my-docs/happy_Flag-Day/12.doc',
' spaces ');
 
 
function MakeCamelCase(S: string): string;
{Convert string to camel-case}
var I: integer;
var Toggle: boolean;
begin
S:=Trim(S);
Result:='';
for I:=1 to Length(S) do
if Toggle then
begin
Result:=Result+UpperCase(S[I]);
Toggle:=False;
end
else if S[I] in [' ','_','-'] then Toggle:=True
else Result:=Result+S[I];
end;
 
 
function MakeSnakeCase(S: string): string;
{Convert string to snake-case}
var I: integer;
var Toggle: boolean;
begin
S:=Trim(S);
Result:='';
for I:=1 to Length(S) do
if S[I] in [' ','-'] then Result:=Result+'_'
else if S[I] in ['A'..'Z'] then
begin
Result:=Result+'_';
Result:=Result+LowerCase(S[I]);
end
else Result:=Result+S[I];
end;
 
procedure ConvertCamelSnake(SA: array of string; Memo: TMemo);
var I: integer;
var S: string;
 
function FormatStrs(S1,S2: string): string;
begin
Result:=Format('%35s',[S1])+' '+Format('%-35s',[S2]);
end;
 
begin
Memo.Lines.Add('Snake Case: ');
for I:=0 to High(SA) do
begin
S:=FormatStrs(SA[I],MakeSnakeCase(SA[I]));
Memo.Lines.Add(S);
end;
Memo.Lines.Add('Camel Case: ');
for I:=0 to High(SA) do
begin
S:=FormatStrs(SA[I],MakeCamelCase(SA[I]));
Memo.Lines.Add(S);
end;
end;
 
procedure CamelSnakeTest(Memo: TMemo);
{Test camel/snake conversion routines}
begin
ConvertCamelSnake(TestStrings,Memo);
end;
 
</syntaxhighlight>
{{out}}
<pre>
Snake Case:
snakeCase snake_case
snake_case snake_case
variable_10_case variable_10_case
variable10Case variable10_case
\u025brgo rE tHis \u025brgo_r_e_t_his
hurry-up-joe! hurry_up_joe!
c://my-docs/happy_Flag-Day/12.doc c://my_docs/happy__flag__day/12.doc
spaces spaces
Camel Case:
snakeCase snakeCase
snake_case snakeCase
variable_10_case variable10Case
variable10Case variable10Case
\u025brgo rE tHis \u025brgoRETHis
hurry-up-joe! hurryUpJoe!
c://my-docs/happy_Flag-Day/12.doc c://myDocs/happyFlagDay/12.doc
spaces spaces
</pre>
 
 
 
=={{header|EasyLang}}==
{{trans|Nim}}
<syntaxhighlight>
func$ strip s$ .
a = 1
while substr s$ a 1 = " "
a += 1
.
b = len s$
while substr s$ b 1 = " "
b -= 1
.
return substr s$ a (b - a + 1)
.
func$ toupper c$ .
c = strcode c$
if c >= 97 and c <= 122
c$ = strchar (c - 32)
.
return c$
.
func$ tolower c$ .
c = strcode c$
if c >= 65 and c <= 90
c$ = strchar (c + 32)
.
return c$
.
func isupper c$ .
c = strcode c$
if c >= 65 and c <= 90
return 1
.
.
delim$ = "_- "
func$ snakecase s$ .
s$ = strip s$
for c$ in strchars s$
if isupper c$ = 1 and prev$ <> ""
if strpos delim$ prev$ = 0
r$ &= "_"
.
r$ &= tolower c$
else
r$ &= c$
.
prev$ = c$
.
return r$
.
func$ camelcase s$ .
s$ = strip s$
prev$ = "x"
for c$ in strchars s$
if strpos delim$ prev$ <> 0
r$ &= toupper c$
elif strpos delim$ c$ = 0
r$ &= c$
.
prev$ = c$
.
return r$
.
test$[] = [ "snakeCase" "snake_case" "variable_10_case" "variable10Case" "ɛrgo rE tHis" "hurry-up-joe!" "c://my-docs/happy_Flag-Day/12.doc" " spaces " ]
print "=== To snake_case ==="
for s$ in test$[]
print s$ & " -> " & snakecase s$
.
print "\n=== To camelCase ==="
for s$ in test$[]
print s$ & " -> " & camelcase s$
.
</syntaxhighlight>
{{out}}
<pre>
=== To snake_case ===
snakeCase -> snake_case
snake_case -> snake_case
variable_10_case -> variable_10_case
variable10Case -> variable10_case
ɛrgo rE tHis -> ɛrgo r_e t_his
hurry-up-joe! -> hurry-up-joe!
c://my-docs/happy_Flag-Day/12.doc -> c://my-docs/happy_flag-day/12.doc
spaces -> spaces
 
=== To camelCase ===
snakeCase -> snakeCase
snake_case -> snakeCase
variable_10_case -> variable10Case
variable10Case -> variable10Case
ɛrgo rE tHis -> ɛrgoRETHis
hurry-up-joe! -> hurryUpJoe!
c://my-docs/happy_Flag-Day/12.doc -> c://myDocs/happyFlagDay/12.doc
spaces -> spaces
</pre>
 
=={{header|Factor}}==
In my interpretation of the task, leading/trailing whitespace should be ignored, not trimmed. And non-leading/trailing whitespace should be dealt with the same way as underscores and hyphens. Although the task says nothing about numbers, I chose to treat letter->number and number->letter transitions the same way as lower->upper for the sake of converting to snake case.
Line 521 ⟶ 834:
" internal space " >camel " internalSpace "
</pre>
 
=={{header|FreeBASIC}}==
<syntaxhighlight lang="vb">Function isDigit(ch As String) As Boolean
Return ch >= "0" And ch <= "9"
End Function
 
Function to_snake_case(s As String) As String
Dim As Integer l = Len(s)
Dim As String snake = Trim(s), tmp = snake
For i As Integer = 1 To Len(snake)
If isDigit(Mid(snake, i, 1)) Then
Continue For
Elseif Instr(Mid(snake, i, 1), " ") Then
Mid(snake, i) = "_"
Continue For
Elseif Instr(Mid(snake, i, 1), Any "\:/-_!.") Then
Continue For
Elseif Mid(snake, i, 1) = Ucase(Mid(snake, i, 1)) Then
tmp = Lcase(Mid(snake, i,1))
Mid(snake, i) = "_"
snake = Left(snake, i) & tmp & Mid(snake, i+1)
End If
Next i
Return snake
End Function
 
Function toCamelCase(s As String) As String
Dim As Integer l = Len(s)
Dim As String camel = Trim(s), tmp = camel
For i As Integer = 1 To Len(camel)
If Instr(Mid(camel, i, 1), Any ":/!.") Then
Continue For
Elseif Instr(Mid(camel, i, 1), Any " _-") Then
camel = Left(camel, i-1) & Ucase(Mid(camel, i+1,1)) & Mid(camel, i+2)
End If
Next i
Return camel
End Function
 
Dim Shared tests(1 To ...) As String*33 => {_
"snakeCase", "snake_case", "variable_10_case", "variable10Case", _
"\u025brgo rE tHis", "ergo rE tHis", "hurry-up-joe!", _
"c://my-docs/happy_Flag-Day/12.doc", " spaces "}
 
Sub test0(title As String, fn As String)
Print title
For i As Integer = 1 To Ubound(tests)
Dim As String texto = tests(i) & " ===> " & to_snake_case(tests(i))
Locate i+1, 41 - Len(texto) / 2 : Print texto
Next i
End Sub
 
Sub test1(title As String, fn As String)
Print title
For i As Integer = 1 To Ubound(tests)
Dim As String texto = tests(i) & " ===> " & toCamelCase(tests(i))
Locate i+12, 41 - Len(texto) / 2 : Print texto
Next i
End Sub
 
test0 "to_snake_case:", "to_snake_case"
Print
test1 "toCamelCase:", "toCamelCase"
 
Sleep</syntaxhighlight>
 
=={{header|FutureBasic}}==
<syntaxhighlight lang="futurebasic">
 
include "NSLog.incl"
local fn snake_toCamel( s as CFStringRef ) as CFStringRef
long r,f
s = fn StringByTrimmingCharactersInSet( s, fn CFCharacterSetGetPredefined(_kCFCharacterSetWhitespace ))
for r = 1 to len(s)-2
f = instr(0, @"_- ", mid(s, r, 1))
if f <> NSNotFound
s = fn stringwithformat(@"%@%@%@", left( s, r ), ucase(mid(s,r+1,1)), mid(s,r+2))
end if
next
end fn = s
 
local fn CamelTo_snake( s as CFStringRef ) as CFStringRef
long r,f
s = fn StringByTrimmingCharactersInSet( s, fn CFCharacterSetGetPredefined(_kCFCharacterSetWhitespace ))
s = fn StringByReplacingOccurrencesOfString( s, @" ", @"_")
s = fn StringByReplacingOccurrencesOfString( s, @"-", @"_")
for r = 1 to len(s)-2
f = instr(0, @"ABCDEFGHIJKLMNOPQRSTUVWXYZ", mid(s, r, 1))
if f <> NSNotFound
if fn StringIsEqual(@"_", mid(s, r-1, 1)) then continue
s = fn stringwithformat(@"%@%@%@", left( s, r ), @"_", mid(s,r))
end if
next
s = fn stringwithformat(@"%@%@",left( s, 1), lcase(mid(s, 1)))
end fn = s
 
local fn show( s1 as CFStringRef )
CFStringRef s = @" "
CFStringRef s2 = fn snake_toCamel( s1 )
CFStringRef s3 = fn CamelTo_snake( s1 )
nslog(@" \"%@\"%@\"%@\"%@\"%@\"", s1, mid(s, len(s1)), s2, mid(s, len(s2)), s3)
end fn
 
nslog( @"%@",@"String ¬
fn snake_toCamel ¬
fn CamelTo_snake")
fn show(@"snakeCase")
fn show(@"snake_case")
fn show(@"variable_10_case")
fn show(@"variable10Case")
fn show(@"ɛrgo rE tHis")
fn show(@"hurry-up-joe!")
fn show(@"c://my-docs/happy_Flag-Day/12.doc")
fn show(@" spaces ")
 
handleevents
</syntaxhighlight>
{{out}}
<syntaxhighlight lang="futurebasic">
String fn snake_toCamel fn CamelTo_snake
"snakeCase" "snakeCase" "snake_case"
"snake_case" "snakeCase" "snake_case"
"variable_10_case" "variable10Case" "variable_10_case"
"variable10Case" "variable10Case" "variable10_case"
"ɛrgo rE tHis" "ɛrgoRETHis" "ɛrgo_r_e_t_his"
"hurry-up-joe!" "hurryUpJoe!" "hurry_up_joe!"
" spaces " "spaces" "spaces"
"c://my-docs/happy_Flag-Day/12.doc" "c://myDocs/happyFlagDay/12.doc" "c://my_docs/happy_flag_day/12.doc"
</syntaxhighlight>
=={{header|Java}}==
The output of this example reflects the authors interpretation of the task.
<syntaxhighlight lang="java">
 
import java.util.List;
 
public final class CamelCaseAndSnakeCase {
 
public static void main(String[] aArgs) {
List<String> variableNames = List.of( "snakeCase", "snake_case", "variable_10_case", "variable10Case",
"ergo rE tHis", "hurry-up-joe!", "c://my-docs/happy_Flag-Day/12.doc", " spaces ");
System.out.println(String.format("%48s", "=== To snake_case ==="));
for ( String text : variableNames ) {
System.out.println(String.format("%34s%s%s", text, " --> ", toSnakeCase(text)));
}
 
System.out.println();
System.out.println(String.format("%48s", "=== To camelCase ==="));
for ( String text : variableNames ) {
System.out.println(String.format("%34s%s%s", text, " --> ", toCamelCase(text)));
}
}
private static String toSnakeCase(String aCamel) {
aCamel = aCamel.trim().replace(SPACE, UNDERSCORE).replace(HYPHEN, UNDERSCORE);
StringBuilder snake = new StringBuilder();
boolean first = true;
for ( char ch : aCamel.toCharArray() ) {
if ( first ) {
snake.append(ch);
first = false;
} else if ( ! first && Character.isUpperCase(ch) ) {
if ( snake.toString().endsWith(UNDERSCORE) ) {
snake.append(Character.toLowerCase(ch));
} else {
snake.append(UNDERSCORE + Character.toLowerCase(ch));
}
} else {
snake.append(ch);
}
}
return snake.toString();
}
private static String toCamelCase(String aSnake) {
aSnake = aSnake.trim().replace(SPACE, UNDERSCORE).replace(HYPHEN, UNDERSCORE);
StringBuilder camel = new StringBuilder();
boolean underscore = false;
for ( char ch : aSnake.toCharArray() ) {
if ( Character.toString(ch).equals(UNDERSCORE) ) {
underscore = true;
} else if ( underscore ) {
camel.append(Character.toUpperCase(ch));
underscore = false;
} else {
camel.append(ch);
}
}
return camel.toString();
}
private static final String SPACE = " ";
private static final String UNDERSCORE = "_";
private static final String HYPHEN = "-";
}
</syntaxhighlight>
{{ out }}
<pre>
=== To snake_case ===
snakeCase --> snake_case
snake_case --> snake_case
variable_10_case --> variable_10_case
variable10Case --> variable10_case
ergo rE tHis --> ergo_r_e_t_his
hurry-up-joe! --> hurry_up_joe!
c://my-docs/happy_Flag-Day/12.doc --> c://my_docs/happy_flag_day/12.doc
spaces --> spaces
 
=== To camelCase ===
snakeCase --> snakeCase
snake_case --> snakeCase
variable_10_case --> variable10Case
variable10Case --> variable10Case
ergo rE tHis --> ergoRETHis
hurry-up-joe! --> hurryUpJoe!
c://my-docs/happy_Flag-Day/12.doc --> c://myDocs/happyFlagDay/12.doc
spaces --> spaces
</pre>
 
=={{header|jq}}==
'''Adapted from [[#Wren|Wren]]'''
Line 844 ⟶ 1,380:
spaces => spaces
</pre>
 
=={{header|Kotlin}}==
{{trans|Scala}}
<syntaxhighlight lang="Kotlin">
fun main() {
val variableNames = listOf("snakeCase", "snake_case", "variable_10_case", "variable10Case",
"ergo rE tHis", "hurry-up-joe!", "c://my-docs/happy_Flag-Day/12.doc", " spaces ")
 
println(" ".repeat(26) + "=== To snake_case ===")
variableNames.forEach { text ->
println("${text.padStart(34)} --> ${toSnakeCase(text)}")
}
 
println("\n" + " ".repeat(26) + "=== To camelCase ===")
variableNames.forEach { text ->
println("${text.padStart(34)} --> ${toCamelCase(text)}")
}
}
 
fun toSnakeCase(camel: String): String {
val snake = StringBuilder()
camel.trim().replace(" ", "_").replace("-", "_").forEach { ch ->
if (snake.isEmpty() || snake.last() != '_' || ch != '_') {
if (ch.isUpperCase() && snake.isNotEmpty() && snake.last() != '_') snake.append('_')
snake.append(ch.toLowerCase())
}
}
return snake.toString()
}
 
fun toCamelCase(snake: String): String {
val camel = StringBuilder()
var underscore = false
snake.trim().replace(" ", "_").replace("-", "_").forEach { ch ->
if (ch == '_') {
underscore = true
} else if (underscore) {
camel.append(ch.toUpperCase())
underscore = false
} else {
camel.append(ch)
}
}
return camel.toString()
}
</syntaxhighlight>
{{out}}
<pre>
=== To snake_case ===
snakeCase --> snake_case
snake_case --> snake_case
variable_10_case --> variable_10_case
variable10Case --> variable10_case
ergo rE tHis --> ergo_r_e_t_his
hurry-up-joe! --> hurry_up_joe!
c://my-docs/happy_Flag-Day/12.doc --> c://my_docs/happy_flag_day/12.doc
spaces --> spaces
 
=== To camelCase ===
snakeCase --> snakeCase
snake_case --> snakeCase
variable_10_case --> variable10Case
variable10Case --> variable10Case
ergo rE tHis --> ergoRETHis
hurry-up-joe! --> hurryUpJoe!
c://my-docs/happy_Flag-Day/12.doc --> c://myDocs/happyFlagDay/12.doc
spaces --> spaces
 
</pre>
 
 
=={{header|Lambdatalk}}==
<syntaxhighlight lang="scheme">
Line 997 ⟶ 1,604:
* We don't handle consecutive upper case characters (e.g. "newUIBox").
* We don't handle non-ASCII characters because of Lua's limited support for them ("ɛ" just happen to work here).
 
=={{header|Nim}}==
We use the same rules as those used by Wren's solution.
<syntaxhighlight lang=Nim>import std/[strformat, strutils, unicode]
 
const Delimiters = [Rune('_'), Rune('-'), Rune(' ')]
 
func toCamelCase(s: string): string =
let s = s.strip(chars = Whitespace)
var prev = Rune(0)
for rune in s.runes:
if prev in Delimiters:
result.add rune.toUpper
elif rune notin Delimiters:
result.add rune
prev = rune
 
func toSnakeCase(s: string): string =
var s= s.strip(chars = Whitespace).replace(' ', '_')
var idx = 0
var prev = Rune(0)
for rune in s.runes:
if rune.isUpper and idx > 0:
if prev notin Delimiters:
result.add '_'
result.add rune.toLower
else:
result.add rune
prev = rune
inc idx
 
const Strings = ["snakeCase", "snake_case", "variable_10_case",
"variable10Case", "ɛrgo rE tHis", "hurry-up-joe!",
"c://my-docs/happy_Flag-Day/12.doc", " spaces "]
 
echo center("### To snake case ###", 69)
for s in Strings:
echo &"{s:>33} → {s.toSnakeCase}"
 
echo()
echo center("### To camel case ###", 69)
for s in Strings:
echo &"{s:>33} → {s.toCamelCase}"
</syntaxhighlight>
 
{{out}}
<pre> ### To snake case ###
snakeCase → snake_case
snake_case → snake_case
variable_10_case → variable_10_case
variable10Case → variable10_case
ɛrgo rE tHis → ɛrgo_r_e_t_his
hurry-up-joe! → hurry-up-joe!
c://my-docs/happy_Flag-Day/12.doc → c://my-docs/happy_flag-day/12.doc
spaces → spaces
 
### To camel case ###
snakeCase → snakeCase
snake_case → snakeCase
variable_10_case → variable10Case
variable10Case → variable10Case
ɛrgo rE tHis → ɛrgoRETHis
hurry-up-joe! → hurryUpJoe!
c://my-docs/happy_Flag-Day/12.doc → c://myDocs/happyFlagDay/12.doc
spaces → spaces
</pre>
 
=={{header|Perl}}==
<syntaxhighlight lang="perl">#!/usr/bin/perl
Line 1,450 ⟶ 2,124:
 
Stack empty.</pre>
 
=={{header|Racket}}==
<syntaxhighlight lang="racket">
#lang racket
 
(define input '("snakeCase" "snake_case" "variable_10_case" "variable10Case" "ɛrgo rE tHis" "hurry-up-joe!" "c://my-docs/happy_Flag-Day/12.doc" " spaces "))
 
;; make '-' the canonical separator by replacing '_' and ' ' with '-'
(define (dashify s)
(regexp-replace* #px"[_ ]" s "-"))
 
;; replace -X with -x for any upper-case X
(define (dash-upper->dash-lower s)
(regexp-replace* #px"-[[:upper:]]" s string-downcase))
 
;; replace X with -x for any upper-case X
(define (upper->dash-lower s)
(regexp-replace* #px"[[:upper:]]"
s
(λ (s) (string-append "-" (string-downcase s)))))
 
(define (string-kebabcase s)
(upper->dash-lower (dash-upper->dash-lower (dashify s))))
 
(define (string-snakecase s)
;; once we have kebabcase, snakecase is easy, just change '-' to '_'
(regexp-replace* #px"-" (string-kebabcase s) "_"))
 
(define (string-camelcase s)
;; camel is pretty easy, too - replace dash-anything with uppercase-anything
;; note: this will change non-letters as well, so -10 becomes just 10
(regexp-replace* #px"-." (string-kebabcase s) (λ (s) (string-upcase (substring s 1 2)))))
 
(define (convert-case to-case case-name namelist)
(printf "Conversions to ~a:~n" case-name)
(for ([name namelist])
(printf "'~a' --> '~a'~n" name (to-case (string-trim name))))
(printf "~n"))
 
(convert-case string-kebabcase "kebab-case" input)
(convert-case string-snakecase "snake_case" input)
(convert-case string-camelcase "camelCase" input)
</syntaxhighlight>
{{out}}
<pre>
Conversions to kebab-case:
'snakeCase' --> 'snake-case'
'snake_case' --> 'snake-case'
'variable_10_case' --> 'variable-10-case'
'variable10Case' --> 'variable10-case'
'ɛrgo rE tHis' --> 'ɛrgo-r-e-t-his'
'hurry-up-joe!' --> 'hurry-up-joe!'
'c://my-docs/happy_Flag-Day/12.doc' --> 'c://my-docs/happy-flag-day/12.doc'
' spaces ' --> 'spaces'
 
Conversions to snake_case:
'snakeCase' --> 'snake_case'
'snake_case' --> 'snake_case'
'variable_10_case' --> 'variable_10_case'
'variable10Case' --> 'variable10_case'
'ɛrgo rE tHis' --> 'ɛrgo_r_e_t_his'
'hurry-up-joe!' --> 'hurry_up_joe!'
'c://my-docs/happy_Flag-Day/12.doc' --> 'c://my_docs/happy_flag_day/12.doc'
' spaces ' --> 'spaces'
 
Conversions to camelCase:
'snakeCase' --> 'snakeCase'
'snake_case' --> 'snakeCase'
'variable_10_case' --> 'variable10Case'
'variable10Case' --> 'variable10Case'
'ɛrgo rE tHis' --> 'ɛrgoRETHis'
'hurry-up-joe!' --> 'hurryUpJoe!'
'c://my-docs/happy_Flag-Day/12.doc' --> 'c://myDocs/happyFlagDay/12.doc'
' spaces ' --> 'spaces'
</pre>
 
=={{header|Raku}}==
The specs are a little vague, but taking a wild stab at it... ''(May be completely wrong but without any examples of expected output it is hard to judge. This is what '''I''' would expect at least...) ''
Line 1,516 ⟶ 2,266:
c://my-docs/happy_Flag-Day/12.doc ==> c://my-docs/happy_Flag-Day/12.doc
spaces ==> spaces</pre>
 
=={{header|Vlang}}==
 
=={{header|RPL}}==
« 1
'''WHILE''' DUP2 DUP SUB " " == '''REPEAT''' 1 + '''END'''
OVER DUP SIZE
'''WHILE''' DUP2 DUP SUB " " == '''REPEAT''' 1 - '''END'''
SWAP DROP SUB
» '<span style="color:blue">TRIM</span>' STO
« <span style="color:blue">TRIM</span> → s
« ""
1 s SIZE '''FOR''' j
s j DUP SUB
'''CASE'''
"- " OVER POS '''THEN'''
DROP "_" '''END'''
DUP "A" ≥ OVER "Z" ≤ AND '''THEN'''
NUM 32 + CHR
'''IF''' OVER DUP SIZE DUP SUB "_" ≠ '''THEN''' "_" SWAP + '''END'''
'''END'''
'''END'''
+
'''NEXT'''
» » '<span style="color:blue">→SNAKE</span>' STO
« <span style="color:blue">TRIM</span> → s
« "" 1 CF
1 s SIZE '''FOR''' j
s j DUP SUB
'''CASE'''
"-_ " OVER POS '''THEN'''
DROP "" 1 SF '''END'''
DUP "a" ≥ OVER "z" ≤ AND 1 FS?C AND '''THEN'''
NUM 32 - CHR '''END'''
'''END'''
+
'''NEXT'''
» » '<span style="color:blue">→CAMEL</span>' STO
« { "snakeCase" "snake_case" "variable_10_case" "variable10Case"
"εrgo rE tHis" "hurry-up-joe!" "c://my-docs/happy_Flag-Day/12.doc" " spaces " }
DUP 1 « <span style="color:blue">→SNAKE</span> » DOLIST
SWAP 1 « <span style="color:blue">→CAMEL</span> » DOLIST
» '<span style="color:blue">TASK</span>' STO
{{out}}
<pre>
2: { "snake_case" "snake_case" "variable_10_case" "variable10_case" "εrgo_r_e_t_his" "hurry_up_joe!" "c://my_docs/happy_flag_day/12.doc" "spaces" }
1: { "snakeCase" "snakeCase" "variable10Case" "variable10Case" "εrgoRETHis" "hurryUpJoe!" "c://myDocs/happyFlagDay/12.doc" "spaces" }
</pre>
 
=={{header|Scala}}==
{{trans|Java}}
<syntaxhighlight lang="Scala">
object CamelCaseAndSnakeCase extends App {
 
val variableNames = List("snakeCase", "snake_case", "variable_10_case", "variable10Case",
"ergo rE tHis", "hurry-up-joe!", "c://my-docs/happy_Flag-Day/12.doc", " spaces ")
 
println(" " * 26 + "=== To snake_case ===")
variableNames.foreach { text =>
println(f"$text%34s --> ${toSnakeCase(text)}")
}
 
println("\n" + " " * 26 + "=== To camelCase ===")
variableNames.foreach { text =>
println(f"$text%34s --> ${toCamelCase(text)}")
}
 
def toSnakeCase(camel: String): String = {
val snake = new StringBuilder
camel.trim.replace(" ", "_").replace("-", "_").foreach { ch =>
if (snake.isEmpty || snake.last != '_' || ch != '_') {
if (ch.isUpper && snake.nonEmpty && snake.last != '_') snake.append('_')
snake.append(ch.toLower)
}
}
snake.toString
}
 
def toCamelCase(snake: String): String = {
val camel = new StringBuilder
var underscore = false
snake.trim.replace(" ", "_").replace("-", "_").foreach { ch =>
if (ch == '_') underscore = true
else if (underscore) {
camel.append(ch.toUpper)
underscore = false
} else camel.append(ch)
}
camel.toString
}
}
</syntaxhighlight>
{{out}}
<pre>
=== To snake_case ===
snakeCase --> snake_case
snake_case --> snake_case
variable_10_case --> variable_10_case
variable10Case --> variable10_case
ergo rE tHis --> ergo_r_e_t_his
hurry-up-joe! --> hurry_up_joe!
c://my-docs/happy_Flag-Day/12.doc --> c://my_docs/happy_flag_day/12.doc
spaces --> spaces
 
=== To camelCase ===
snakeCase --> snakeCase
snake_case --> snakeCase
variable_10_case --> variable10Case
variable10Case --> variable10Case
ergo rE tHis --> ergoRETHis
hurry-up-joe! --> hurryUpJoe!
c://my-docs/happy_Flag-Day/12.doc --> c://myDocs/happyFlagDay/12.doc
spaces --> spaces
 
</pre>
 
=={{header|V (Vlang)}}==
{{trans|go}}
<syntaxhighlight lang="v (vlang)">fn to_camel(snake string) string {
mut camel := ''
mut underscore := false
Line 1,568 ⟶ 2,436:
{{out}}
<pre>Same as Go entry</pre>
 
=={{header|Wren}}==
{{libheader|Wren-str}}
Line 1,576 ⟶ 2,445:
 
2. I've assumed that an underscore should not be added if the previous character was already a separator.
<syntaxhighlight lang="ecmascriptwren">import "./str" for Char
import "./fmt" for Fmt
 
var toCamel = Fn.new { |snake|
Line 1,654 ⟶ 2,523:
spaces -> spaces
</pre>
 
=={{header|XPL0}}==
<syntaxhighlight lang="xpl0">string 0; \use zero-terminated strings
1,969

edits