无法获取访问字符串中字符的方法
Unable to get method to access characters in a String
我正在尝试在 Android Studio 上制作 Caesar Cipher 应用程序。我已准备好 XML 文件和大部分其他代码,但无法继续执行代码中必须访问字符串的每个元素的点。我试过使用 charAt()
函数。
另外我只想让数组中该点的字符增加指定的数字,我这样说是因为我看到 'z' 之后有特殊字符,如 '|'出现,这对我来说很好。这是我的第一个应用程序,确实需要一些帮助。错误在第 47 和 61 行。
这是我的代码:
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity
{
EditText input;
EditText output;
EditText num;
String inp;
String out;
int choice;
Character c;
Button enc, dec;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
input = (EditText) findViewById(R.id.input);
output= (EditText) findViewById(R.id.output);
num = (EditText) findViewById(R.id.num);
enc = (Button) findViewById(R.id.enc);
dec = (Button) findViewById(R.id.dec);
enc.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
inp=input.getText().toString();
choice= Integer.parseInt(num.getText().toString());
for(int i=0;i<input.length();i++)
{
inp.charAt(i)= (char) (inp.charAt(i)+choice);
}
}
});
dec.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v1)
{
inp=input.getText().toString();
choice= Integer.parseInt(num.getText().toString());
for(int i=0;i<input.length();i++)
{
inp.charAt(i)= (char) (inp.charAt(i)-choice);
}
}
});
}
}
我相信你的第一个问题就在这里:
inp.charAt(i)= (char) (inp.charAt(i)+choice);
您正在尝试为方法赋值 return。这在 Java.
中是不可能的
字符串在 Java 中是不可变的 - 如果您想替换字符串中的值,您必须构建一个新字符串并重新分配指向旧字符串的引用,而不是指向新字符串字符串.
可能还有其他问题我没有机会讨论,但我相信这是真正的问题。我不完全明白你想做什么,所以很遗憾,我不能就你应该使用什么提出建议。
基于@corsiKa 的回答,我提出以下建议。首先,将您的输入字符串转换为 char[]
:
char[] array = inp.toCharArray();
现在您可以遍历数组并修改其内容:
array[i] = array[i] + choice;
最后,您可以从该数组构建输出字符串:
output.setText(new String(array));
我正在尝试在 Android Studio 上制作 Caesar Cipher 应用程序。我已准备好 XML 文件和大部分其他代码,但无法继续执行代码中必须访问字符串的每个元素的点。我试过使用 charAt()
函数。
另外我只想让数组中该点的字符增加指定的数字,我这样说是因为我看到 'z' 之后有特殊字符,如 '|'出现,这对我来说很好。这是我的第一个应用程序,确实需要一些帮助。错误在第 47 和 61 行。
这是我的代码:
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity
{
EditText input;
EditText output;
EditText num;
String inp;
String out;
int choice;
Character c;
Button enc, dec;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
input = (EditText) findViewById(R.id.input);
output= (EditText) findViewById(R.id.output);
num = (EditText) findViewById(R.id.num);
enc = (Button) findViewById(R.id.enc);
dec = (Button) findViewById(R.id.dec);
enc.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
inp=input.getText().toString();
choice= Integer.parseInt(num.getText().toString());
for(int i=0;i<input.length();i++)
{
inp.charAt(i)= (char) (inp.charAt(i)+choice);
}
}
});
dec.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v1)
{
inp=input.getText().toString();
choice= Integer.parseInt(num.getText().toString());
for(int i=0;i<input.length();i++)
{
inp.charAt(i)= (char) (inp.charAt(i)-choice);
}
}
});
}
}
我相信你的第一个问题就在这里:
inp.charAt(i)= (char) (inp.charAt(i)+choice);
您正在尝试为方法赋值 return。这在 Java.
中是不可能的字符串在 Java 中是不可变的 - 如果您想替换字符串中的值,您必须构建一个新字符串并重新分配指向旧字符串的引用,而不是指向新字符串字符串.
可能还有其他问题我没有机会讨论,但我相信这是真正的问题。我不完全明白你想做什么,所以很遗憾,我不能就你应该使用什么提出建议。
基于@corsiKa 的回答,我提出以下建议。首先,将您的输入字符串转换为 char[]
:
char[] array = inp.toCharArray();
现在您可以遍历数组并修改其内容:
array[i] = array[i] + choice;
最后,您可以从该数组构建输出字符串:
output.setText(new String(array));