You need to test if an object is a string. Since Erlang does not have objects per se, the goal here is really that you want to test if a term is a string.
You can't! An Erlang string is just a list of characters (really,
a list of integer values). So, the variable you are examining could be a list of letters, a set of coordinates, or a set of bytecode for Donald Knuth's MMIX machine.
About the best you can do is determine that the term you are evaluating is a list or not. For that, use the Erlang built-in-function is_list:
1> A="This is fun!".
"This is fun!"
2> is_list(A).
true
3> B=12.
12
4> is_list(B).
false
If you were very concerned that a term was printable, you could verify
that it consists of a list of integers that fall within the range of
characters you consider to be a string:
1> Fun = fun(XX) ->
1> if XX < 0 -> false;
1> XX > 255 -> false;
1> true -> true
1> end
1> end.
#Fun<erl_eval.6.39074546>
2> Is_String = fun(XY) ->
2> caseis_list(XY) of
2> false -> false;
2> true -> lists:all(Fun, XY)
2> end
2> end.
#Fun<erl_eval.6.39074546>
3> A.
"This is fun!"
4> Is_String(A).
true
5> C.
[2000,1982,199891]
6> Is_String(C).
false