Empty string: Difference between revisions

From Rosetta Code
Content added Content deleted
m (→‎{{header|UNIX Shell}}: s='2 -gt 3' is not an empty string.)
Line 547: Line 547:
if s:
if s:
print('String s is not empty.')</lang>
print('String s is not empty.')</lang>

=={{header|R}}==

<lang R>s <- ''

if (s == '') cat('Empty\n')
#or
if (nchar(s) == 0) cat('Empty\n')

if (s != '') cat('Not empty\n')
#or
if (nchar(s) > 0) cat('Not empty\n')</lang>


=={{header|Retro}}==
=={{header|Retro}}==

Revision as of 19:54, 4 February 2012

Task
Empty string
You are encouraged to solve this task according to the task description, using any language you may know.

Languages may have features for dealing specifically with empty strings (those containing no characters).

The task is to:

  • Demonstrate how to assign an empty string to a variable.
  • Demonstrate how to check that a string is empty.
  • Demonstrate how to check that a string is not empty.

Ada

<lang Ada>procedure Empty_String is

  function Is_Empty(S: String) return Boolean is
  begin
     return S = ""; -- test that S is empty
  end Is_Empty;
  Empty: String := ""; -- Assign empty string
  XXXXX: String := "Not Empty";

begin

  if (not Is_Empty(Empty)) or Is_Empty(XXXXX) then
     raise Program_Error with "something went wrong very very badly!!!";
  end if;

end Empty_String;</lang>

AutoHotkey

AutoHotkey has both "Traditional" or literal text, and "Expression" mode. This code demonstrates the task using both methods. <lang AutoHotkey>;; Traditional

Assign an empty string

var =

Check that a string is empty

If var =

  MsgBox the var is empty
Check that a string is not empty

If var !=

  Msgbox the var is not empty


Expression mode
Assign an empty string

var := ""

Check that a string is empty

If (var = "")

  MsgBox the var is empty
Check that a string is not empty

If (var != "")

  Msgbox the var is not empty</lang>

AWK

<lang awk>#!/usr/bin/awk -f BEGIN {

 # Demonstrate how to assign an empty string to a variable. 
 a=""; 
 b="XYZ"; 
 print "a = ",a;	
 print "b = ",b;	
 print "length(a)=",length(a);
 print "length(b)=",length(b);
 # Demonstrate how to check that a string is empty.
 print "Is a empty ?",length(a)==0;
 print "Is a not empty ?",length(a)!=0;
 # Demonstrate how to check that a string is not empty.  
 print "Is b empty ?",length(b)==0;
 print "Is b not empty ?",length(b)!=0;

}</lang>

$ awk -f R/tmp/string.awk 
a =  
b =  XYZ
length(a)= 0
length(b)= 3
Is a empty ? 1
Is a not empty ? 0
Is b empty ? 0
Is b not empty ? 1

Bracmat

There are two ways to assign a string to a variable. The variant using the = operator does not evaluate the value before the assignment, the variant using the : (match) operator does. If the value is a string, there is no difference, as a string always evaluates to itself. <lang bracmat>( :?a & (b=) & abra:?c & (d=cadabra) & !a: { a is empty string } & !b: { b is also empty string } & !c:~ { c is not an empty string } & !d:~ { neither is d an empty string } ) </lang>

BBC BASIC

<lang bbcbasic> REM assign an empty string to a variable:

     var$ = ""
     
     REM Check that a string is empty:
     IF var$ = "" THEN PRINT "String is empty"
     
     REM Check that a string is not empty:
     IF var$ <> "" THEN PRINT "String is not empty"

</lang>

C

In C the strings are char pointers. A string terminates with the null char (U+0000, '\0'), which is not considered part of the string. Thus an empty string is "\0", while a null string is a null pointer which points to nothing. <lang C>/* assign an empty string */ char *str = ""; /* to test a null string */ if (str) { ... } /* to test if string is empty */ if (str[0] == '\0') { ... } /* or equivalently use strlen function */ if (strlen(str) == 0) { ... } /* or compare to a known empty string, same thing. "== 0" means strings are equal */ if (strcmp(str, "") == 0) { ... } </lang>

C++

<lang cpp>#include <string>

// ...

std::string str; // a string object for an empty string

if (str.empty()) { ... } // to test if string is empty

// we could also use the following if (str.length() == 0) { ... } if (str == "") { ... }</lang>

C#

<lang csharp>using System;

class Program {

   static void Main (string[] args) {
       string example = string.Empty;
       if (string.IsNullOrEmpty(example)) { }
       if (!string.IsNullOrEmpty(example)) { }
   }

} </lang>

CoffeeScript

Empty strings are mostly straightforward in CoffeeScript, but there's one gotcha.

<lang coffeescript> isEmptyString = (s) ->

 # Returns true iff s is an empty string.
 # (This returns false for non-strings as well.)
 return true if s instanceof String and s.length == 0
 s == 
 

empties = ["", , new String()] non_empties = [new String('yo'), 'foo', {}] console.log (isEmptyString(v) for v in empties) # [true, true, true] console.log (isEmptyString(v) for v in non_empties) # [false, false, false] console.log (s = ) == "" # true console.log new String() == # false, due to underlying JavaScript's distinction between objects and primitives </lang>

D

D treats null strings and empty strings as equal on the value level, but different on object level. You need to take this into account when checking for empty. <lang d>void main(){

   string s1 = null;
   string s2 = "";
   
   // the content is the same
   assert(!s1.length); 
   assert(!s2.length);
   assert(s1 == "" && s1 == null); 
   assert(s2 == "" && s2 == null);
   assert(s1 == s2);
   // but they don't point to the same memory region
   assert(s1 is null && s1 !is "");
   assert(s2 is "" && s2 !is null);
   assert(s1 !is s2);
   assert(s1.ptr == null);
   assert(*s2.ptr == '\0');
   
   assert(isEmpty(s1));    
   assert(isEmptyNotNull(s2));    

}

bool isEmpty(string s) {

   return !s.length;

}

bool isEmptyNotNull(string s) {

   return s is "";

}</lang>

Delphi

<lang Delphi>program EmptyString;

{$APPTYPE CONSOLE}

uses SysUtils;

function StringIsEmpty(const aString: string): Boolean; begin

 Result := aString = ;

end;

var

 s: string;

begin

 s := ;
 Writeln(StringIsEmpty(s)); // True
 s := 'abc';
 Writeln(StringIsEmpty(s)); // False

end.</lang>

DWScript

<lang delphi>var s : String;

s := ; // assign an empty string (can also use "")

if s = then

  PrintLn('empty');

s := 'hello';

if s <> then

  PrintLn('not empty');</lang>

Euphoria

<lang euphoria>sequence s

-- assign an empty string s = ""

-- another way to assign an empty string s = {} -- "" and {} are equivalent

if not length(s) then

   -- string is empty

end if

if length(s) then

   -- string is not empty

end if</lang>

Fantom

Fantom uses "" to represent an empty string, and provides the isEmpty method to check if a string is empty.

<lang fantom> a := "" // assign an empty string to 'a' a.isEmpty // method on sys::Str to check if string is empty a.size == 0 // what isEmpty actually checks a == "" // alternate check for an empty string !a.isEmpty // check that a string is not empty </lang>

Forth

Strings are represented as an addr-len pair on the stack. An empty string has len 0.

<lang forth>: empty? ( c-addr u -- ? ) nip 0= ;

s" " dup . empty? . \ 0 -1</lang>

Go

Go has no special syntax for empty strings <lang go>// assign empty string to a variable s = ""

// check that string is empty s == ""

// check that string is not empty s > ""</lang>

Groovy

<lang groovy>def s = // or "" if you wish assert s.empty

s = '1 is the loneliest number' assert !s.empty</lang>

Haskell

<lang haskell>import Control.Monad

-- In Haskell strings are just lists (of characters), so we can use the function -- 'null', which applies to all lists. We don't want to use the length, since -- Haskell allows infinite lists.

main = do

 let s = ""
 when (null s) (putStrLn "Empty.")
 when (not $ null s) (putStrLn "Not empty.")</lang>

Icon and Unicon

Icon and Unicon can produce empty strings in several ways: <lang Icon>s := "" # null string s := string('A'--'A') # ... converted from cset difference s := char(0)[0:0] # ... by slicing

s1 == "" # lexical comparison, could convert s1 to string s1 === "" # comparison won't force conversion

  • s1 = 0 # zero length, however, *x is polymorphic
  • string(s1) = 0 # zero length string

s1 ~== "" # non null strings comparisons s1 ~=== ""

  • string(s1) ~= 0

s := &null # NOT a null string, null type /s # test for null type \s # test for non-null type </lang>

J

<lang j> variable=:

  0=#variable

1

  0<#variable

0</lang>

Note that J attempts to make no distinction between empty lists, regardless of their type. In other words, while some operations can reveal the type of an empty list (for example, anything that can introduce padding based on the type of the list itself) this distinction is ignored whenever possible. You can perform arithmetic on an empty string, and you can append text to an empty list of numbers even though these operations would not succeed on non-empty lists of the same type.

Thus it's not appropriate, in general case J code, to check that an empty string is of type string.

Note also that in an if. or while. statement, J treats an empty string (or the absence of any argument) as true.

Java

String.isEmpty() is part of Java 1.6. Other options for previous versions are noted. <lang java5>String s = ""; if(s != null && s.isEmpty()){//optionally, instead of "s.isEmpty()": "s.length() == 0" or "s.equals("")"

  System.out.println("s is empty");

}else{

  System.out.println("s is not empty");

}</lang>

K

Translation of: J

<lang K> variable: ""

  0=#variable

1

  0<#variable

0</lang>


LabVIEW

This image is a VI Snippet, an executable image of LabVIEW code. The LabVIEW version is shown on the top-right hand corner. You can download it, then drag-and-drop it onto the LabVIEW block diagram from a file browser, and it will appear as runnable, editable code.

Lhogho

Lhogho is a Logo compiler for Windows and Linux <lang logo>make "str " ;make null-string word print empty? :str ;prints 'true' print not empty? :str ;prints 'false' </lang>

Lua

<lang Lua> str = "" -- create empty string str == "" -- test for empty string str ~= "" -- test for nonempty string </lang>

Mathematica

<lang Mathematica> str=""; (*Create*) str==="" (*test empty*) str=!="" (*test not empty*) </lang>

MATLAB / Octave

<lang Matlab>  % Demonstrate how to assign an empty string to a variable.

   str = ; 
   % Demonstrate how to check that a string is empty.
   isempty(str)
   (length(str)==0)
   % Demonstrate how to check that a string is not empty. 
   ~isempty(str)
   (length(str)>0)</lang>

Mirah

<lang mirah>empty_string1 = "" empty_string2 = String.new

puts "empty string is empty" if empty_string1.isEmpty() puts "empty string has no length" if empty_string2.length() == 0 puts "empty string is not nil" unless empty_string1 == nil</lang>

Nemerle

Assign an empty string: <lang Nemerle>def empty = ""; mutable fill_later = "";</lang> Check if a string is empty/not empty: <lang Nemerle>a_string == ""; a_string != 0; a_string.Length == 0; a_string.Length > 0;</lang>

Objeck

<lang objeck> s := ""; if(s->IsEmpty()) {

  "s is empty"->PrintLine();

} else{

  "s is not empty"->PrintLine();

}; </lang>

OCaml

<lang ocaml>let is_string_empty s =

 (s = "")

let () =

 let s1 = ""
 and s2 = "not empty" in
 Printf.printf "s1 empty? %B\n" (is_string_empty s1);
 Printf.printf "s2 empty? %B\n" (is_string_empty s2);
</lang>

outputs:

s1 empty? true
s2 empty? false

OpenEdge/Progress

Strings can be stored in CHARACTER and LONGCHAR variables. Both are initially empty. Both can also be unknown. A CHARACTER has a maximum length of approx 32000 bytes.

<lang progress>DEFINE VARIABLE cc AS CHARACTER.

IF cc > THEN

  MESSAGE 'not empty' VIEW-AS ALERT-BOX.

ELSE IF cc = ? THEN

  MESSAGE 'unknown' VIEW-AS ALERT-BOX.

ELSE /* IF cc = */

  MESSAGE 'empty' VIEW-AS ALERT-BOX.

</lang>

PARI/GP

<lang parigp>a=""; isEmpty(s)=s=="" \\ Alternately: isEmpty(s)=#s==0 isNonempty(s)=s!="" \\ Alternatively: isNonempty(s)=#s</lang>

Pascal

See Delphi

Perl

In Perl, an empty string is often used to represent a false value. <lang Perl>$s = ""; if ($s) { ... } # false

  1. to tell if a string is false because it's empty, or it's plain not there (undefined)

$s = undef; if (defined $s) { ... } # false; would be true on ""

  1. though, perl implicitly converts between strings and numbers, so this is also false

$s = "0"; if ($s) { ... } # false; also false on "000", "0.0", "\x0", "0 with text", etc

  1. but a string that converts to number 0 is not always false, though:

$s = "0 but true"; if ($s) { ... } # it's true! black magic!</lang>

Perl 6

In Perl 6 we can't just test a string for truth to determine if it has a value. The string "0" will test as false even though it has a value. Instead we must test for length.

<lang perl6>my $s = ; say 'String is empty' unless $s.chars; say 'String is not empty' if $s.chars;</lang>

PHP

<lang Php><?php

$str = ; // assign an empty string to a variable

// check that a string is empty if (empty($str)) { ... }

// check that a string is not empty if (! empty($str)) { ... }

// we could also use the following if ($str == ) { ... } if ($str != ) { ... }

if (strlen($str) == 0) { ... } if (strlen($str) != 0) { ... }</lang>

PicoLisp

The empty string is represented by 'NIL' in PicoLisp. During input, two subsequent double quotes '""' return the symbol NIL. <lang PicoLisp># To assign a variable an empty string: (off String) (setq String "") (setq String NIL)

  1. To check for an empty string:

(or String ..) (ifn String ..) (unless String ..)

  1. or a non-empty string:

(and String ..) (if String ..) (when String ..)</lang>

PL/I

<lang PL/I> s = ; /* assign an empty string to a variable. */ if length(s) = 0 then ... /* To test whether a string is empty */ if length(s) > 0 then ... /* to test for a non-empty string */ </lang>

PureBasic

In PureBasic we can just test a string for truth to determine if it has a value. <lang PureBasic>Procedure.s isStringEmpty(a.s)

 If a
   ProcedureReturn "String is not empty, it contains '" + a + "'."
 Else
   ProcedureReturn "String is empty, or null."
 EndIf 

EndProcedure

If OpenConsole()

 Define a.s = ""
 Define b.s = "stuff"
 PrintN(isStringEmpty(a))
 PrintN(isStringEmpty(b))
 
 Print(#CRLF$ + #CRLF$ + "Press ENTER to exit"): Input()
 CloseConsole()

EndIf</lang> Sample output:

String is empty, or null.
String is not empty, it contains 'stuff'.

Python

The empty string is printed by Python REPL as '', and is treated as boolean false (as are most empty container types, by convention). Any non-empty string, including '0', is always treated as True in a boolean context. <lang python>s = if not s:

   print('String s is empty.')

if s:

   print('String s is not empty.')</lang>

R

<lang R>s <-

if (s == ) cat('Empty\n')

  1. or

if (nchar(s) == 0) cat('Empty\n')

if (s != ) cat('Not empty\n')

  1. or

if (nchar(s) > 0) cat('Not empty\n')</lang>

Retro

Create an empty string and assign it to a variable. In these keepString is used to ensure that the string is permanent.

<lang Retro> ( by creating a variable ) "" keepString variable: foo

( by setting an existing variable 'foo' ) "" keepString !foo </lang>

Checking that a string is empty. A string with a length of zero is assumed to be empty.

<lang Retro>

emtpy? ( $-f ) getLength 0 = ;

"" empty? putn "hello" empty? putn </lang>

Check that a string is not empty.

<lang Retro>

notEmpty? ( $-f ) getLength 0 > ;

"" notEmpty? putn "hello" notEmpty? putn </lang>

Ruby

Create an empty string <lang ruby>s = "" s = String.new s = "any string"; s.clear</lang>

These expressions all evaluate to true to determine emptiness: <lang ruby>s == "" s.eql?("") s.empty? s.length == 0 s[/^$/]

  1. also silly things like

s.each_char.to_a.empty?</lang>

Non-empty expressions, in addition to simply negating the above expressions: <lang ruby>s != "" s.length > 0 s[/./]</lang>

Note that we can not do the following, because the empty string is equivalent to true in Ruby (Boolean values#Ruby): <lang ruby>if s then puts "not empty" end</lang>

Scala

<lang scala>// assign empty string to a variable val s="" // check that string is empty s.isEmpty // true s=="" // true s.size==0 // true // check that string is not empty s.nonEmpty // false s!="" // false s.size>0 // false</lang>

Scheme

<lang scheme>(define empty-string "") (define (string-null? s) (string=? "" s)) (define (string-not-null? s) (string<? "" s))</lang>

Seed7

<lang seed7># assign empty string to a variable s := ""

  1. check that string is empty

s = ""

  1. check that string is not empty

s <> ""</lang>

Tcl

The only special position that the empty string has in Tcl is that a great many commands return it, and the REPL of tclsh and wish doesn't print it. Otherwise, it is just like any other value. <lang tcl>set s "" if {$s eq ""} {puts "s contains an empty string"} if {$s ne ""} {puts "s contains a non-empty string"}</lang> There are other ways to check for emptiness and non-emptiness too (though the above are favored for reasons of simplicity, clarity and speed): <lang tcl>if {[string equal $s ""]} {puts "is empty"} if {[string length $s] == 0} {puts "is empty"} if {[string compare $s ""] != 0} {puts "is non-empty"}</lang>

TXR

Pattern Matching

<lang txr>@(bind a "")</lang>

If a is unbound, a binding is created, containing the empty string. If a is already bound, bind succeeds if a contains the empty string, and the pattern matching continues at the next directive. Or else a failure occurs, triggering backtracking behavior.

TXR Lisp

<lang lisp>@(do (defvar *a* "")

    (if (equal *a* "")
      (format t "empty string\n"))
    (set *a* "nonempty")
    (if (zerop (length *a*))
      (format t "guess what?\n")))</lang>

TUSCRIPT

<lang tuscript> $$ MODE TUSCRIPT s="" IF (s=="") PRINT "s is an empty string" IF (s!="") PRINT "s is a non-empty string" </lang> Output:

s is an empty string

UNIX Shell

<lang bash># assign an empty string to a variable s=""

  1. the "test" command can determine truth by examining the string itself

if [ "$s" ]; then echo "not empty"; else echo "empty"; fi

  1. compare the string to the empty string

if [ "$s" = "" ]; then echo "s is the empty string"; fi if [ "$s" != "" ]; then echo "s is not empty"; fi

  1. examine the length of the string

if [ -z "$s" ]; then echo "the string has length zero: it is empty"; fi if [ -n "$s" ]; then echo "the string has length non-zero: it is not empty"; fi</lang>

When using comparison operators, it is crucial to double-quote the variable within the conditional expression. This will ensure the shell sees the correct number of arguments. For example, if one were to write [ $s = "" ], then after variable substitition, the shell will try to evaluate [ = "" ] which is a syntax error.

VBA

<lang vb> dim s as string

' assign an empty string to a variable: s = ""

' test if a string is empty: if s = "" then Debug.Print "empty!" ' or: if Len(s) = 0 then Debug.Print "still empty!"

'test if a string is not empty: if s <> "" then Debug.Print "not an empty string" 'or: if Len(s) > 0 then Debug.Print "not empty." </lang>