There are different types of swapping you might want.
AnchoredTranspose swaps 2 regions you select.
This function swaps occurrences of strings in the buffer or a region of it.
(defun swap-text (str1 str2 beg end)
"Changes all STR1 to STR2 and all STR2 to STR1 in beg/end region."
(interactive "sString A: \nsString B: \nr")
(if mark-active
(setq deactivate-mark t)
(setq beg (point-min) end (point-max)))
(goto-char beg)
(while (re-search-forward
(concat "\\(?:\\b\\(" (regexp-quote str1) "\\)\\|\\("
(regexp-quote str2) "\\)\\b\\)") end t)
(if (match-string 1)
(replace-match str2 t t)
(replace-match str1 t t))))This can be accomplished with ReplaceRegexp and an evaluated Emacs Lisp replacement in Emacs 22.
C-M-% STR1\|STR2 RET \,(if (string= "STR1" \1) "STR2" "STR1") RET
A library for handling lists of search and replacements, Lisp:regexpl.el, can do this with the following:
(regexpl-search-replace-list '(("STR1" . "STR2") ("STR2" . "STR1")))