[英]How do I add characters to a string immediately before the occurrence of all numbers between the first and last ones in Java?
[英]How can I exchange the first and last characters of a string in Java?
我整个夏天都在练习,试图变得更好,但我有点坚持以下几点:
http://www.javabat.com/prob/p123384
给定一个字符串,返回一个新字符串,其中第一个和最后一个字符已交换。
frontBack("code") → "eodc"
frontBack("a") → "a"
frontBack("ab") → "ba"
public String frontBack(String str)
{
String aString = "";
if (str.length() == 0){
return "";
}
char beginning = str.charAt(0);
char end = str.charAt(str.length() - 1);
str.replace(beginning, end);
str.replace(end, beginning);
return str;
}
字符串可以拆分为一个字符数组,并且可以用一个字符数组组成。 有关 String 对象的更多详细信息,请转到Java API并单击左下窗格中的 String。 该窗格按字母顺序排序。
编辑:由于有些人更彻底,我想我会提供更多细节。 使用 String 的 .toCharArray() 方法创建一个 char 数组。 取出第一个元素并将其存储在 char 中,将第一个元素与最后一个元素交换,然后将存储在 char 中的元素放入数组的最后一个元素中,然后说:
String temp = new String(charArray);
并返回。 这是假设 charArray 是您的字符数组。
我建议不要使用String.replace
方法,而是使用String.substring
方法来获取不包括第一个和最后一个字母的字符,然后连接beginning
和end
字符。
此外, String.replace
方法将替换所有出现的指定字符,并返回具有所述替换的新String
。 由于在上面的代码中没有提取返回值,因此String.replace
调用在这里实际上并没有做太多的事情。
这是因为 Java 中的String
是不可变的,因此replace
方法不能对原始String
进行任何更改,在这种情况下是str
变量。
还要补充一点,这种方法不适用于长度为 1 的String
。使用上面的方法,使用长度为 1 的源String
调用String.substring
将导致StringIndexOutOfBoundsException
,所以这也会如果采用上述方法,则必须作为特殊情况处理。
坦率地说, indyK1ng 的回答中提出的方法,其中char[]
是从String
获得的,并执行开始和结束字符的简单交换,然后从修改后的char[]
制作String
开始听起来更愉快。
Java 中的String
实例是不可变的。 这意味着您不能更改String
中的字符; 不同的字符序列需要一个新对象。 因此,当您使用replace
方法时,请丢弃原始字符串,并改用该方法的结果。
但是,对于此方法,您可能希望将String
实例转换为可变的字符数组 ( char[]
)。 交换所需字符后,使用该数组创建一个新的String
实例。
一些提示:
字符串是不可变的,这意味着它们无法更改。 因此, str.replace()
不会更改str
,而是返回一个新字符串。
也许replace
不是最好的......考虑frontBack("abcabc")
:你的函数,如果它被纠正,将用'c'
替换'a'
' 产生"cbccbc"
,然后'c'
用'a'
产生"abaaba"
。 这不太对!
String
中的replace
方法实际上返回一个String
,所以如果你坚持使用replace
,你会这样做:
beginReplace = str.replace( beginning, end );
endReplace = beginReplace.replace( end, beginning );
return( str );
但这实际上并不能解决您的具体问题,因为replace
会将字符串中所有出现的字符替换为其替换。
例如,如果我的字符串是“apple”并且我说的是“apple”.replace('p', 'q'),那么结果字符串将是“aqqle”。
另一个
没有创建额外对象
的例子:
if (str.length() > 1) {
char[] chars = str.toCharArray();
// replace with swap()
char first = chars[0];
chars[0] = chars[chars.length - 1];
chars[chars.length - 1] = first;
str = new String(chars);
}
return str;
编辑:在长度 = 1 字符串上执行交换是无操作的。
编辑 2: dfa 对 copyValueOf 的更改没有任何意义,正如 Java 源代码在 String.java 中所说:“// 所有公共字符串构造函数现在都复制数据。” 并且调用只是委托给一个字符串构造函数。
你可以使用正则表达式..
return str.replaceFirst("(.)(.*)(.)", "$3$2$1");
只是另一种略有不同的方法,因此您可以了解各种可能性。 我建议您注意短字符串的快速退出(而不是将更复杂的处理嵌套在 if() 子句中),以及 String.format() 的使用,因为它是您工具箱中的一种方便的技术,不是因为在这个特定示例中它明显优于常规的“+”连接。
public static String exchange(String s) {
int n = s.length();
if (n < 2)
return s;
return String.format("%s%s%s", s.charAt(n - 1), s.substring(1, n - 1), s.charAt(0));
}
简单的解决方案是:
public String frontBack(String str) {
if (str == null || str.length() == 0) {
return str;
}
char[] cs = str.toCharArray();
char first = cs[0];
cs[0] = cs[cs.length -1];
cs[cs.length -1] = first;
return new String(cs);
}
使用字符数组(注意讨厌的空字符串或空字符串参数!)
另一种解决方案使用 StringBuilder (通常用于进行字符串操作,因为字符串本身是不可变的。
public String frontBack(String str) {
if (str == null || str.length() == 0) {
return str;
}
StringBuilder sb = new StringBuilder(str);
char first = sb.charAt(0);
sb.setCharAt(0, sb.charAt(sb.length()-1));
sb.setCharAt(sb.length()-1, first);
return sb.toString();
}
另一种方法(更多用于指导而不是实际使用)是这种方法:
public String frontBack(String str) {
if (str == null || str.length() < 2) {
return str;
}
StringBuilder sb = new StringBuilder(str);
String sub = sb.substring(1, sb.length() -1);
return sb.reverse().replace(1, sb.length() -1, sub).toString();
}
这里将完整的字符串反转,然后将不应该反转的部分替换为子字符串。 ;)
public String frontBack(String input)
{
return
input.substring(input.length() - 1) + // The last character
input.substring(1, input.length() - 1) + // plus the middle part
input.substring(0, 1); // plus the first character.
}
您可以使用表示“可变字符序列”的 StringBuilder。
它具有解决问题所需的所有方法:charAt、setCharAt、length 和 toString。
if (s.length < 2) {
return s;
}
return s.subString(s.length - 1) + s.subString(1, s.length - 2) + s.subString(0, 1);
(未经测试,索引可能是一个...
public String lastChars(String a, String b) {
if(a.length()>=1&&b.length()>=1){
String str = a.substring(0,1);
String str1 =b.substring(b.length()-1);
return str+str1;
}
else if(a.length()==0&&b.length()==0){
String v ="@";
String z ="@";
return v+z;
}
else if(a.length()==0&&b.length()>=1){
String s ="@";
String s1 = b.substring(b.length()-1);
return s+s1;
}
else if(a.length()>=1&&b.length()==0){
String f= a.substring(0,1);
String h = "@";
return f+h;
}
return a;
}
您可以使用以下代码:
public String frontBack(String str) {
if (str.length() <= 1)
return str;
String mid = str.substring(1, str.length()-1);
// last + mid + first
return str.charAt(str.length()-1) + mid + str.charAt(0);
}
class swap
{
public static void main(String[] args)
{
Scanner s=new Scanner(System.in);
System.out.println("no of elements in array");
int n=s.nextInt();
int a[]=new int[n];
System.out.println("Elements");
for(int i=0;i<n;i++)
{
a[i]=s.nextInt();
}
int b[]=new int[n];
for(int i=0;i<n;i++)
{
b[i]=a[i];
}
int end=n-1;
b[0]=b[end];
b[end]=a[0];
for(int i=0;i<n;i++)
{
System.out.println(b[i]);
}
}
}
if (str.length() <= 1) {
return str;
}
String mid = str.substring(1, str.length()-1);
return str.charAt(str.length()-1) + mid + str.charAt(0);
def front_back(str): if len(str)==1: return str else: str1=str[len(str)-1] str2=str[1:len(str)-1] str3=str[0] str4 =str1 +str2+str3 返回 str4
显示字符串索引超出范围
function frontBack(str: string) {
return str.slice(str.length - 1) + str.slice(1, -1) + str.slice(0, 1)
}
Slice 将“切掉”最后一个字母。 计算字符串的长度str.length -1
,(加)从索引 1 开始并且是在索引 -1 处表示的最后一个字符的提示切片字符串,(加)切片从索引 0 到的最后一个字母索引 1。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.